JXBStreamer/0000700000175000017500000000000010540073030013126 5ustar sjscottsjscottJXBStreamer/build.xml0000700000175000017500000000634510540073030014762 0ustar sjscottsjscott Builds, tests, and runs the project JXBStreamer. JXBStreamer/manifest.mf0000700000175000017500000000012210535352434015272 0ustar sjscottsjscottManifest-Version: 1.0 X-COMMENT: Main-Class will be added automatically by build JXBStreamer/build/0000700000175000017500000000000010535374210014235 5ustar sjscottsjscottJXBStreamer/src/0000700000175000017500000000000010540072762013730 5ustar sjscottsjscottJXBStreamer/dist/0000700000175000017500000000000010535637644014116 5ustar sjscottsjscottJXBStreamer/nbproject/0000700000175000017500000000000010540073030015114 5ustar sjscottsjscottJXBStreamer/build/classes/0000700000175000017500000000000010535374212015674 5ustar sjscottsjscottJXBStreamer/build/classes/com/0000700000175000017500000000000010535374212016452 5ustar sjscottsjscottJXBStreamer/build/classes/com/superhac/0000700000175000017500000000000010535374212020264 5ustar sjscottsjscottJXBStreamer/build/classes/com/superhac/JXBStreamer/0000700000175000017500000000000010535374212022412 5ustar sjscottsjscottJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/0000700000175000017500000000000010535374212023136 5ustar sjscottsjscottJXBStreamer/build/classes/com/superhac/JXBStreamer/Core/0000700000175000017500000000000010540073072023276 5ustar sjscottsjscottJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SettingsWindow.class0000700000175000017500000001375010540073072027162 0ustar sjscottsjscott1! \ \ ] \ \ \ \ \ \ \ \ \ \ \ \ \       \     +  \  \ ( ( + ( ( / / 2 2 2 2 \ ( ? / \ ? ? ? ? \ \ F F J F N P P P U  \ \jDialogLjavax/swing/JDialog; jContentPaneLjavax/swing/JPanel;serverPortjTextFieldLjavax/swing/JTextField;jPanel1jLabel1Ljavax/swing/JLabel; resetServerZportLjava/lang/String;autoDiscoveryEnabledjPaneljLabel jCheckBoxLjavax/swing/JCheckBox;jPanel2jButtonLjavax/swing/JButton;jButton1jPanel3()VCodeLineNumberTableLocalVariableTablethis-Lcom/superhac/JXBStreamer/Gui/SettingsWindow;(Ljava/lang/String;Z)V getJDialog+(Ljavax/swing/JFrame;)Ljavax/swing/JDialog;parentLjavax/swing/JFrame;getJContentPane()Ljavax/swing/JPanel;getServerPortjTextField()Ljavax/swing/JTextField; getJPanel1 flowLayoutLjava/awt/FlowLayout; isResetServer()ZgetPort()IisAutoDiscoveryEnabled getJPanel flowLayout2 getJCheckBox()Ljavax/swing/JCheckBox; getJPanel2 flowLayout1 getJButton()Ljavax/swing/JButton; getJButton1 getJPanel3 gridLayoutLjava/awt/GridLayout; access$0021(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;Z)Zx0x1 access$100D(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;)Ljavax/swing/JDialog; SourceFileSettingsWindow.java ^_ gh uv `a bc da ef ij kh la mf no pa qr sr tajavax/swing/JDialog uSettings java/awt/Dimension u javax/swing/JPaneljavax/swing/BoxLayout u     javax/swing/JTextField u  java/awt/Color u  java/awt/FlowLayout   javax/swing/JLabel Server Port:      Enable Auto Discovery? javax/swing/JCheckBox  javax/swing/JButtonOK-com/superhac/JXBStreamer/Gui/SettingsWindow$1 InnerClasses u Cancel-com/superhac/JXBStreamer/Gui/SettingsWindow$2java/awt/GridLayout  Server Settings java/awt/FontDialog u   +com/superhac/JXBStreamer/Gui/SettingsWindowjava/lang/Object(Ljava/awt/Frame;Z)VsetTitle(Ljava/lang/String;)V(II)VsetPreferredSize(Ljava/awt/Dimension;)VsetMinimumSizesetSizesetContentPane(Ljava/awt/Container;)VsetLocationRelativeTo(Ljava/awt/Component;)V(Ljava/awt/Container;I)V setLayout(Ljava/awt/LayoutManager;)VblackLjava/awt/Color; setBackground(Ljava/awt/Color;)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)V setColumns(I)V(III)V setForeground setAlignmentsetTextgetText()Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)I isSelectedsetVgap setSelected(Z)V0(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;)VaddActionListener"(Ljava/awt/event/ActionListener;)VsetRows(Ljava/lang/String;II)Vjavax/swing/BorderFactorycreateTitledBorderq(Ljavax/swing/border/Border;Ljava/lang/String;IILjava/awt/Font;Ljava/awt/Color;)Ljavax/swing/border/TitledBorder; setBorder(Ljavax/swing/border/Border;)V!\]^_`abcdaefghijkhlamfnopaqrsrtauvwQ******** * * * * ****xF# "(-27<AF K!P%y Qz{u|w[******** * * * * *****+ * xN( "(-27<AF K!P*U+Z,y [z{[ij[kh}~wq*h*Y+**Y,*Y,*Y***+*x& 345617E8Y9d;l>yqz{qwL*C*Y* Y*!"*#$**%&**'&*xGHI%J/K;LGNy Lz{wC*:*(Y* )***+Yt!,-*#.*xWXYZ4[>]y Cz{w*x/Y0L+1*2Y3*45*+Yt!,6*#7*Y*#$*+"**&**8&*x6 fghij(k=lGmRn\odrps|uymz{w/*xyy z{w5 *9:x~y  z{w2* ;xy z{w* }/Y0L+1+<*2Y3 * =5* +Yt!,6* #7*Y * #$* +"* * &* *>&* x:$-BLWaiuyrz{wA* 8*?Y@ * * A* +Yt!,B* #C* x2<y Az{wN*E/Y0L+1*Y*#$*+"**D&**E&*x& )1=Iy:Nz{wi/*&*FYG*HI*JY*KL*x*y /z{wi/*&*FYG*MI*NY*OL*x*y /z{w |*sPYQL+R+S*Y*#$*+"*TUYV W+Yt!,XY**Z&**[&*x. $.6_kwyh|z{w;*Zxy{hw/*xy {JNJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$8.class0000700000175000017500000000167010540073072025210 0ustar sjscottsjscott14    !"# $%&'(this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$8;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod) *+ , -,. /0 share panel1 23#com/superhac/JXBStreamer/Gui/Main$8java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem8()Ljavax/swing/JMenuItem;()VdisplaySharePaneljava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)V    4 *+*  L* JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SharePanel$4.class0000700000175000017500000000310210540073072026332 0ustar sjscottsjscott1P - . +/ 01! 234 +5 678 9:;<this$0)Lcom/superhac/JXBStreamer/Gui/SharePanel;,(Lcom/superhac/JXBStreamer/Gui/SharePanel;)VCodeLineNumberTableLocalVariableTablethis InnerClasses+Lcom/superhac/JXBStreamer/Gui/SharePanel$4;actionPerformed(Ljava/awt/event/ActionEvent;)VfileLjava/io/File;pathLjavax/swing/tree/TreePath;arr$[Ljavax/swing/tree/TreePath;len$Ii$eLjava/awt/event/ActionEvent;paths SourceFileSharePanel.javaEnclosingMethod= >?  @ ABC DEF GH java/io/File IJK LM,com/superhac/JXBStreamer/Gui/ShareTableModel NO)com/superhac/JXBStreamer/Gui/SharePanel$4java/lang/Objectjava/awt/event/ActionListener'com/superhac/JXBStreamer/Gui/SharePanel getJButton1()Ljavax/swing/JButton;()V access$100>(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JTree;javax/swing/JTreegetSelectionPaths()[Ljavax/swing/tree/TreePath;javax/swing/tree/TreePathgetLastPathComponent()Ljava/lang/Object; access$000?(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JTable;javax/swing/JTablegetModel ()Ljavax/swing/table/TableModel; addSharePath(Ljava/io/File;)V 4 *+*{  G*M,N-66+-2::*  Ա}$.@FR.$6 !2"#/$#GG%&9'!()*+,  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/FileTreeModel.class0000700000175000017500000001150710540073072026650 0ustar sjscottsjscott1 @                  @  !    ' ' ' '   /  2 5 2 2 9 2 2 >serialVersionUIDJ ConstantValue listeners%Ljavax/swing/event/EventListenerList;LEAFLjava/lang/Object;mapLjava/util/Map;rootLjava/io/File;(Ljava/io/File;)VCodeLineNumberTableLocalVariableTablee Ljava/lang/NullPointerException;this,Lcom/superhac/JXBStreamer/Gui/FileTreeModel; ExceptionsgetRoot()Ljava/lang/Object;isLeaf(Ljava/lang/Object;)Znode getChildCount(Ljava/lang/Object;)IchildrenLjava/util/List;getChild'(Ljava/lang/Object;I)Ljava/lang/Object;parentindexIgetIndexOfChild'(Ljava/lang/Object;Ljava/lang/Object;)Ichild$(Ljava/lang/Object;)Ljava/util/List;lenic[Ljava/io/File;fvaluevalueForPathChanged0(Ljavax/swing/tree/TreePath;Ljava/lang/Object;)VpathLjavax/swing/tree/TreePath;addTreeModelListener((Ljavax/swing/event/TreeModelListener;)Vl%Ljavax/swing/event/TreeModelListener;removeTreeModelListenerclone&Ljava/lang/CloneNotSupportedException;main([Ljava/lang/String;)Vargs[Ljava/lang/String;treeLjavax/swing/JTree;Ljavax/swing/JFrame;()V SourceFileFileTreeModel.java Q OP MN KL java/lang/NullPointerException#javax/swing/event/EventListenerList IJjava/util/HashMap bl a java/io/Filejava/util/List&com/superhac/JXBStreamer/Gui/DirFilter java/util/ArrayList Q ^#javax/swing/event/TreeModelListener |\*com/superhac/JXBStreamer/Gui/FileTreeModel Q$java/lang/CloneNotSupportedExceptionjava/lang/InternalError/ Q  java/lang/StringBuilder : No such file or directory  javax/swing/JTree QR Qjavax/swing/JFrame,com/superhac/JXBStreamer/Gui/FileTreeModel$2 InnerClasses javax/swing/JScrollPane Q ,com/superhac/JXBStreamer/Gui/FileTreeModel$1java/lang/Objectjavax/swing/tree/TreeModeljava/io/Serializablejava/lang/Cloneable isDirectory()Z java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;get&(Ljava/lang/Object;)Ljava/lang/Object;size()I(I)Ljava/lang/Object;indexOf listFiles%(Ljava/io/FileFilter;)[Ljava/io/File;(I)Vadd-(Ljava/lang/Class;Ljava/util/EventListener;)Vremove(Ljava/util/Map;)V(Ljava/lang/String;)Vexistsjava/lang/SystemerrLjava/io/PrintStream;append-(Ljava/lang/Object;)Ljava/lang/StringBuilder;-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;java/io/PrintStreamprintlnexit(Ljavax/swing/tree/TreeModel;)VaddWindowListener"(Ljava/awt/event/WindowListener;)VgetContentPane()Ljava/awt/Container;(Ljava/awt/Component;)Vjava/awt/Container*(Ljava/awt/Component;)Ljava/awt/Component;pack setVisible(Z)V!@ABCDEFGIJKLMNOP QRS;**++*+WM,*Y * Y !T* ,- 03:!7"9$</>:@U "VW;XY;OPZ[\S/*TEU XY]^SJ*+ TJUXY_L`aS]*+M,,TOQ R TU XY_L bcdeSJ *+TYU  XY fL ghijSJ *+,T^U  XY fL kLblSR+M*, N--:z,Y:QY:6632W2*2W̧ Y:*,WTJceghjl$n1p6rBtQv^wix{tz|~URG:mhJ7nh1jopXY_LqPrLbcstS?TU XYuvrLwxSD * +T  U XY yz{xSD * +T  U XY yz|\S-*L+Y + Y*+L!Y"#$ T"$%U |Y%V}-XY ~SoY#$L+% &'Y(+)*+,-./YY+01M2Y+34N-5Y67-89Y,:;W-<-=T. *.>JUeinU*o eOP>1J%qS# >Y?T!5>JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SharePanel$3.class0000700000175000017500000000164510540073072026343 0ustar sjscottsjscott1*   ! "#$serialVersionUIDJ ConstantValue&cthis$0)Lcom/superhac/JXBStreamer/Gui/SharePanel;,(Lcom/superhac/JXBStreamer/Gui/SharePanel;)VCodeLineNumberTableLocalVariableTablethis InnerClasses+Lcom/superhac/JXBStreamer/Gui/SharePanel$3;getTextNonSelectionColor()Ljava/awt/Color;getBackgroundNonSelectionColor SourceFileSharePanel.javaEnclosingMethod% &' (java/awt/Color ))com/superhac/JXBStreamer/Gui/SharePanel$3(javax/swing/tree/DefaultTreeCellRenderer'com/superhac/JXBStreamer/Gui/SharePanelgetJTree()Ljavax/swing/JTree;()V(III)V    4 *+*E  9Yt!B 5 YF   JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$5.class0000700000175000017500000000142310540073072025201 0ustar sjscottsjscott1&    this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$5;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod! "#  $ %$#com/superhac/JXBStreamer/Gui/Main$5java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem5()Ljavax/swing/JMenuItem;()V saveSettings   4 *+* X   @* YZ  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/DebugWindow$1.class0000700000175000017500000000256210540073072026534 0ustar sjscottsjscott1A  !" # $ %& ' ()*+this$0*Lcom/superhac/JXBStreamer/Gui/DebugWindow;-(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)VCodeLineNumberTableLocalVariableTablethis InnerClasses,Lcom/superhac/JXBStreamer/Gui/DebugWindow$1; windowClosing(Ljava/awt/event/WindowEvent;)VeLjava/awt/event/WindowEvent; SourceFileDebugWindow.javaEnclosingMethod, -. /0 12 34 589 :; <=> ?/*com/superhac/JXBStreamer/Gui/DebugWindow$1java/awt/event/WindowAdapter(com/superhac/JXBStreamer/Gui/DebugWindow getJFrame()Ljavax/swing/JFrame;()V#com/superhac/JXBStreamer/Core/DebugdebugZ access$100F(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)Ljava/util/logging/Logger; access$000@ WindowHandlerd(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler;java/util/logging/Logger removeHandler(Ljava/util/logging/Handler;)V access$200@(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)Ljavax/swing/JFrame;javax/swing/JFramedispose6com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler   4 *+*2  ` ***4569   67JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SharePanel.class0000700000175000017500000002026010540073072026206 0ustar sjscottsjscott1 F     %         %       . . . . .   .   8 7 7 7 7 7   A  7 G 7 J J  N N!" R N#$ U% U! U& U U ' .( .) *+ a, c a- ./ .01 234 j5 a6 a a a7 89: s; u u< u u u= >? u@ FA BC DEF GH  u# uIJjPanelLjavax/swing/JPanel;jPanel2jPanel3jPanel4 jScrollPaneLjavax/swing/JScrollPane;jTableLjavax/swing/JTable;jPanel6jButtonLjavax/swing/JButton;jPanel1jLabelLjavax/swing/JLabel;sharesLjava/util/ArrayList; Signature%Ljava/util/ArrayList;jPanel5 jScrollPane1jTreeLjavax/swing/JTree;jPanel7jButton1 jComboBoxLjavax/swing/JComboBox;(Ljava/util/ArrayList;)VCodeLineNumberTableLocalVariableTablethis)Lcom/superhac/JXBStreamer/Gui/SharePanel;LocalVariableTypeTable((Ljava/util/ArrayList;)V getJPanel()Ljavax/swing/JPanel; getJPanel2 gridLayoutLjava/awt/GridLayout; getJPanel3 getJPanel4getJScrollPane()Ljavax/swing/JScrollPane; getJTable()Ljavax/swing/JTable; getJPanel6 flowLayoutLjava/awt/FlowLayout; getJButton()Ljavax/swing/JButton; getJPanel1 setShareList getJPanel5 gridLayout1getJScrollPane1getJTree()Ljavax/swing/JTree;rootLjava/io/File;e Ljava/lang/NullPointerException;roots[Ljava/io/File; getJPanel7 getJButton1 getJComboBox()Ljavax/swing/JComboBox;iIarr$len$i$children access$000?(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JTable;x0 access$100>(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JTree; access$200B(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JComboBox; SourceFileSharePanel.java K javax/swing/JPaneljava/awt/BorderLayout LM NO PQ North RS Centerjava/awt/GridLayout TU VU java/awt/Color W XQ South javax/swing/JScrollPane YZ [\] ^_javax/swing/JTable,com/superhac/JXBStreamer/Gui/ShareTableModel ` abc java/awt/Font ae_Sindibad d efjava/lang/Object)com/superhac/JXBStreamer/Gui/SharePanel$1 InnerClasses g hijava/awt/FlowLayout jU javax/swing/JButtonRemove kl)com/superhac/JXBStreamer/Gui/SharePanel$2 mnjavax/swing/JLabel Share ManagerSamanata oU pU javax/swing/JTree)com/superhac/JXBStreamer/Gui/SharePanel$3 qrs tu vwA:\x yz*com/superhac/JXBStreamer/Gui/FileTreeModel { |}java/lang/NullPointerException Add)com/superhac/JXBStreamer/Gui/SharePanel$4javax/swing/JComboBox Lucida Sans ~    w l'javax/swing/plaf/basic/BasicArrowButton)com/superhac/JXBStreamer/Gui/SharePanel$5 'com/superhac/JXBStreamer/Gui/SharePanel()V setLayout(Ljava/awt/LayoutManager;)VblackLjava/awt/Color; setBackground(Ljava/awt/Color;)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)VsetRows(I)V setColumns(III)V setForeground setOpaque(Z)V getViewport()Ljavax/swing/JViewport;javax/swing/JViewportsetViewportView(Ljava/awt/Component;)V!(Ljavax/swing/table/TableModel;)VgetTableHeader"()Ljavax/swing/table/JTableHeader;javax/swing/table/JTableHeader(Ljava/lang/String;II)VsetFont(Ljava/awt/Font;)V,(Lcom/superhac/JXBStreamer/Gui/SharePanel;)VsetDefaultRenderer9(Ljava/lang/Class;Ljavax/swing/table/TableCellRenderer;)V setAlignmentsetText(Ljava/lang/String;)VaddActionListener"(Ljava/awt/event/ActionListener;)VsetHorizontalScrollBarPolicysetVerticalScrollBarPolicysetCellRenderer&(Ljavax/swing/tree/TreeCellRenderer;)V java/io/File listRoots()[Ljava/io/File;getAbsolutePath()Ljava/lang/String;java/lang/StringcompareToIgnoreCase(Ljava/lang/String;)I(Ljava/io/File;)VsetModel(Ljavax/swing/tree/TreeModel;)VgetComponentCount()Ijava/lang/SystemoutLjava/io/PrintStream; getComponent(I)Ljava/awt/Component;getClass()Ljava/lang/Class;java/lang/ClasstoStringjava/io/PrintStreamprintlnjava/awt/ComponentaddItem(Ljava/lang/Object;)V!FZ****** ** * * * *******+N:  ""$'&,(1*6.;0@2E4J6O8T;Y@ZZ ZI*@*Y*Y******HIK L*M7NDQ IS*JY L+!+"*Y**+**#**$** Z[\]^$_.`6aBbNe?Sk*b*Y*Y**%Yt!&'**(**)***+*& nop q*r?sLtYufx k^*U*Y*Y**%Yt!&'**,+**-*" *?LY ^V* M*.Y/ * 0* %Yt!&1* 2* 34* *56* "19FQ V**7Y8Y*9:*;*%Yt!&<*=*>?*>%Yt!&@*>AYBCD*AYB CE*FGY*HI*. '<DQi W* NJYKL+L*Y * * %Yt!&'* +* *M* & )>FRCWi/* &*NYO * PQ* RY*ST* * /* w*UYV * WX* %Yt!&Y* AYZC[* %Y&\*Y * * * * * 0CZeo{ G W*NY L+!*Y**%Yt!&'*+**]*& )>FR CWS*J*.Y/*^*_*0*%Yt!&1**`6*")*+-$/.0C1N3 S"**aYb*cY*defL+2ghi +2M+2M*jY,kl*%Yt!&m*n*AYB Co N*l*>p><=>!J%L3M:O>VMWbXlY^Z]`47%f>Mg-*$*Y***q*ijkl(n -i/*&*NYO*rQ*sY*tT*wxyz* /**uYv*w*AYx Cy*%Yt!&z*{<=D|*}~*}*}%Yt!&*Y*fM,>6(,2:ghi **J/DLSguHNF1.+L/* /* /* *GRcsJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SaveAndLoadSettings.class0000700000175000017500000000337010540073072030031 0ustar sjscottsjscott1` > ? @A > BCDE F G HI HJKL FMN O P QR JSTUserialVersionUIDJ ConstantValueV portNumberIenableAutoDiscoveryZsharesLjava/util/ArrayList; Signature%Ljava/util/ArrayList;()VCodeLineNumberTableLocalVariableTablethis2Lcom/superhac/JXBStreamer/Gui/SaveAndLoadSettings; saveSettingsoutLjava/io/ObjectOutput;eLjava/io/IOException; loadSettings4()Lcom/superhac/JXBStreamer/Gui/SaveAndLoadSettings;fileLjava/io/File;inLjava/io/ObjectInputStream; newSettings"Ljava/lang/ClassNotFoundException; SourceFileSaveAndLoadSettings.java () ! "#java/util/ArrayList $%java/io/ObjectOutputStreamjava/io/FileOutputStreamjxb.cfg (V (WX YZ [)java/io/IOException java/io/Filejava/io/ObjectInputStreamjava/io/FileInputStream (\ (] ^_0com/superhac/JXBStreamer/Gui/SaveAndLoadSettings java/lang/ClassNotFoundExceptionjava/lang/Objectjava/io/Serializable(Ljava/lang/String;)V(Ljava/io/OutputStream;)Vjava/io/ObjectOutput writeObject(Ljava/lang/Object;)Vclose(Ljava/io/File;)V(Ljava/io/InputStream;)V readObject()Ljava/lang/Object;! !"#$%&'()*R**x**Y+  , -./)*}#YY L+* + L!+!!"#,  01"23#-.45*/Y LYY+M,N,-LL'(',+& ( ),".&0(2)6,4-8,> 6789":.)2;-23/-.<=JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/ShareTableModel.class0000700000175000017500000000353210540073072027162 0ustar sjscottsjscott1W :;< = > ? @A @BC DE @F G @HIJserialVersionUIDJ ConstantValuercolNames[Ljava/lang/String;sharesLjava/util/ArrayList; Signature%Ljava/util/ArrayList;(Ljava/util/ArrayList;)VCodeLineNumberTableLocalVariableTablethis.Lcom/superhac/JXBStreamer/Gui/ShareTableModel;LocalVariableTypeTable((Ljava/util/ArrayList;)V getColumnName(I)Ljava/lang/String;colI getRowCount()IgetColumnCount getValueAt(II)Ljava/lang/Object;rowfileLjava/io/File;isCellEditable(II)Z addSharePath(Ljava/io/File;)VremoveSharePath(I)Vindex SourceFileShareTableModel.java Kjava/lang/StringShare's   LMN O* PQ java/io/File RM ST UK VQ,com/superhac/JXBStreamer/Gui/ShareTableModel$javax/swing/table/AbstractTableModel()VtoString()Ljava/lang/String;java/util/ArrayListsizeget(I)Ljava/lang/Object;getAbsolutePathadd(Ljava/lang/Object;)ZfireTableDataChangedremove!i**YS*+  !"# $%&> *2  !" '()*2* !"+*0* !",-|(* N-    "%& *(!"(.(('( /012@) !".('(34J*+ W* - . / !"/056J*W* 3 4 5 !"7(89JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$4.class0000700000175000017500000000311210540073072025175 0ustar sjscottsjscott1Y * +, (- ./ 01 .2 3 (4 5 67 8 9 :;<=this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$4;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent;sett-Lcom/superhac/JXBStreamer/Gui/SettingsWindow; settingssLjavax/swing/JDialog; SourceFile Main.javaEnclosingMethod> ?@  A+com/superhac/JXBStreamer/Gui/SettingsWindow BCD EFG HI JK L MN OPQ RS TU VW XU#com/superhac/JXBStreamer/Gui/Main$4java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem4()Ljavax/swing/JMenuItem;()Vsettings2Lcom/superhac/JXBStreamer/Gui/SaveAndLoadSettings;0com/superhac/JXBStreamer/Gui/SaveAndLoadSettings portNumberIjava/lang/StringvalueOf(I)Ljava/lang/String;enableAutoDiscoveryZ(Ljava/lang/String;Z)V access$0009(Lcom/superhac/JXBStreamer/Gui/Main;)Ljavax/swing/JFrame; getJDialog+(Ljavax/swing/JFrame;)Ljavax/swing/JDialog;javax/swing/JDialog setVisible(Z)V isResetServer()ZgetPort()IisAutoDiscoveryEnabled 4 *+*4  TY**M,* N- , *, *,7:+;0>7AEBSE*TT 5!"+)#$%&'() JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/FileTreeModel$2.class0000700000175000017500000000126310540073072026774 0ustar sjscottsjscott1"  ()VCodeLineNumberTableLocalVariableTablethis InnerClasses.Lcom/superhac/JXBStreamer/Gui/FileTreeModel$2; windowClosing(Ljava/awt/event/WindowEvent;)VeLjava/awt/event/WindowEvent; SourceFileFileTreeModel.javaEnclosingMethod   !,com/superhac/JXBStreamer/Gui/FileTreeModel$2java/awt/event/WindowAdapter*com/superhac/JXBStreamer/Gui/FileTreeModelmain([Ljava/lang/String;)Vjava/lang/Systemexit(I)V /*  =    JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SplashScreen.class0000700000175000017500000000407710540073072026566 0ustar sjscottsjscott1 &A %B %C %DE AF G H %I J KL KM N O P Q R ST A U VW AX &YZ [\ ] ^ _` !A !a !bcdjWindowLjavax/swing/JWindow; jContentPaneLjavax/swing/JPanel;jLabelLjavax/swing/JLabel;()VCodeLineNumberTableLocalVariableTablethis+Lcom/superhac/JXBStreamer/Gui/SplashScreen; getJWindow()Ljavax/swing/JWindow;dimLjava/awt/Dimension;xIygetJContentPane()Ljavax/swing/JPanel; gridLayoutLjava/awt/GridLayout; SourceFileSplashScreen.java -. '( )* +,javax/swing/JWindowjava/awt/Dimension -e fg ;< hij kl mn op oq rp rq se tujava/awt/GridLayout vw xwjavax/swing/JLabeljavax/swing/ImageIcon yz//com/superhac/JXBStreamer/Gui/images/splash.gif{ |} -~  wjavax/swing/JPanel )com/superhac/JXBStreamer/Gui/SplashScreenjava/lang/Object(II)VsetSize(Ljava/awt/Dimension;)VsetContentPane(Ljava/awt/Container;)Vjava/awt/ToolkitgetDefaultToolkit()Ljava/awt/Toolkit; getScreenSize()Ljava/awt/Dimension;getWidth()D()I getHeight setLocationsetAlwaysOnTop(Z)VsetRows(I)V setColumnsgetClass()Ljava/lang/Class;java/lang/Class getResource"(Ljava/lang/String;)Ljava/net/URL;(Ljava/net/URL;)VsetIcon(Ljavax/swing/Icon;)VsetHorizontalAlignment setLayout(Ljava/awt/LayoutManager;)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)V!%&'()*+,-./J****0  1 2345/p*g*Y*Y@ ** L+*gl=+*gl>***0* &18 I!Z"c#k%1*8367I"89Z:9p23;</g*^YL++*Y*Y** *!Y"*+#**$*0. ./012$3;4C5N6V7b91S=>g23?@JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$2.class0000700000175000017500000000210710540073072025176 0ustar sjscottsjscott17    ! "# $%&'(this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$2;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod) *+ , -. /01 234 56#com/superhac/JXBStreamer/Gui/Main$2java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem2()Ljavax/swing/JMenuItem;()V aboutWindow*Lcom/superhac/JXBStreamer/Gui/AboutWindow; access$0009(Lcom/superhac/JXBStreamer/Gui/Main;)Ljavax/swing/JFrame;(com/superhac/JXBStreamer/Gui/AboutWindow getJFrame*(Ljavax/swing/JFrame;)Ljavax/swing/JFrame;javax/swing/JFrame setVisible(Z)V    4 *+*  N**  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/StatusPanel.class0000700000175000017500000000616010540073072026432 0ustar sjscottsjscott1 -Y ;Z ;[ ;\ ;] ;^_ ` ;ab Y c de Y f g ;hi j ;kl &mn Yo p q r ds t u v wd ;x yz &Y &d &u &{ |d |u}~ . & 1Y 1 1u 6 1 1djPanelLjavax/swing/JPanel; jScrollPaneLjavax/swing/JScrollPane;jTableLjavax/swing/JTable;model5Lcom/superhac/JXBStreamer/Gui/ConnectionStatusTabMod;jPanel1jLabelLjavax/swing/JLabel;.(Lcom/superhac/JXBStreamer/Core/XBMSPServer;)VCodeLineNumberTableLocalVariableTablethis*Lcom/superhac/JXBStreamer/Gui/StatusPanel;server+Lcom/superhac/JXBStreamer/Core/XBMSPServer; getJPanel()Ljavax/swing/JPanel;getJScrollPane()Ljavax/swing/JScrollPane; getJTable()Ljavax/swing/JTable; getJPanel1 SourceFileStatusPanel.java G <= >? @A D= EF3com/superhac/JXBStreamer/Gui/ConnectionStatusTabMod GH BCjavax/swing/JPanel java/awt/BorderLayout RSCenter VQNorth javax/swing/JScrollPanejava/awt/Dimension G java/awt/Color G  TU javax/swing/JTable java/lang/Object*com/superhac/JXBStreamer/Gui/StatusPanel$1 InnerClasses G javax/swing/JLabelConnection Monitor  java/awt/FontSamanata G (com/superhac/JXBStreamer/Gui/StatusPanel()VblackLjava/awt/Color; setBackground(Ljava/awt/Color;)V setLayout(Ljava/awt/LayoutManager;)V setVisible(Z)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)VsetModel!(Ljavax/swing/table/TableModel;)V(II)VsetPreferredSize(Ljava/awt/Dimension;)VsetVerticalScrollBarPolicy(I)V(III)V setForeground getViewport()Ljavax/swing/JViewport;javax/swing/JViewportsetViewportView(Ljava/awt/Component;)VgetTableHeader"()Ljavax/swing/table/JTableHeader;javax/swing/table/JTableHeader-(Lcom/superhac/JXBStreamer/Gui/StatusPanel;)VsetDefaultRenderer9(Ljava/lang/Class;Ljavax/swing/table/TableCellRenderer;)VsetText(Ljava/lang/String;)V(Ljava/lang/String;II)VsetFont(Ljava/awt/Font;)V!;-<=>?@ABCD=EFGHIz********Y+ J" ) K*LM*NOPQI\*S* Y * *Y******* *J& '()**+2,?-L.W1K \LMRSIk*b*Y*Y X** *Yt! !*" #**$%*J& :;<&=/>9?NA[BfDK kLMTUIm*d*&Y'* (*Yt! )** +**Yt! ,*-.Y*/0*J"MNOP1R>SVThjK mLMVQI*w*1Y2*34*Yt! 5*6Y789*Y :* Y * ***J* stuv0wCxZyezo{{}K LMWX .JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SharePanel$5.class0000700000175000017500000000262710540073072026346 0ustar sjscottsjscott1D & ' $( )*+ $,- . /01234this$0)Lcom/superhac/JXBStreamer/Gui/SharePanel;,(Lcom/superhac/JXBStreamer/Gui/SharePanel;)VCodeLineNumberTableLocalVariableTablethis InnerClasses+Lcom/superhac/JXBStreamer/Gui/SharePanel$5;actionPerformed(Ljava/awt/event/ActionEvent;)Vee Ljava/lang/NullPointerException;eLjava/awt/event/ActionEvent;fileLjava/io/File; SourceFileSharePanel.javaEnclosingMethod5 67  8 9:; <= java/io/File >?*com/superhac/JXBStreamer/Gui/FileTreeModel @A BCjava/lang/NullPointerException)com/superhac/JXBStreamer/Gui/SharePanel$5java/lang/Objectjava/awt/event/ActionListener'com/superhac/JXBStreamer/Gui/SharePanel getJComboBox()Ljavax/swing/JComboBox;()V access$200B(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JComboBox;javax/swing/JComboBoxgetSelectedItem()Ljava/lang/Object; access$100>(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JTree;(Ljava/io/File;)Vjavax/swing/JTreesetModel(Ljavax/swing/tree/TreeModel;)V  4 *+*  >*M,.*$*Y, N* .1 .12=*2 >>0 !"#$%  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/FileTreeModel$1.class0000700000175000017500000000102010540073072026762 0ustar sjscottsjscott1 serialVersionUIDJ ConstantValue͙()VCodeLineNumberTableLocalVariableTablethis InnerClasses.Lcom/superhac/JXBStreamer/Gui/FileTreeModel$1; SourceFileFileTreeModel.javaEnclosingMethod ,com/superhac/JXBStreamer/Gui/FileTreeModel$1java/lang/Objectjava/io/Serializable*com/superhac/JXBStreamer/Gui/FileTreeModel   /* "  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main.class0000700000175000017500000002324510540073072025056 0ustar sjscottsjscott1                     %  *  *   %  ! " # $% 4& 6 4' 4 4( ; ; ) ;* + , -. C/ C0 C C12 I3 C4 5 C6 78 9 :; < => V? V0 V V4 V@ ]C VDEF aCGH dCIJ gCKL jCMN mC O 4P 4Q  R S T wUV W X wYZ { {[ ~ \] ^ _`a Cbc Cd e fgh i j kl mno pqrstuv w Qx mainJFrameLjavax/swing/JFrame; jContentPaneLjavax/swing/JPanel; jJMenuBarLjavax/swing/JMenuBar;jMenuLjavax/swing/JMenu;jMenu1jMenu2 jMenuItem1Ljavax/swing/JMenuItem; jMenuItem2 jMenuItem3 jMenuItem4 jMenuItem5 jMenuItem6server+Lcom/superhac/JXBStreamer/Core/XBMSPServer; statusPanel aboutWindow*Lcom/superhac/JXBStreamer/Gui/AboutWindow; sharePanel)Lcom/superhac/JXBStreamer/Gui/SharePanel;mainStatusPanel,Lcom/superhac/JXBStreamer/Gui/MainStatusBar;settings2Lcom/superhac/JXBStreamer/Gui/SaveAndLoadSettings;jMenu3 jMenuItem7 jMenuItem8()VCodeLineNumberTableLocalVariableTablethis#Lcom/superhac/JXBStreamer/Gui/Main; getJFrame()Ljavax/swing/JFrame;getJContentPane()Ljavax/swing/JPanel; getJJMenuBar()Ljavax/swing/JMenuBar;getJMenu()Ljavax/swing/JMenu; getJMenu1 getJMenu2 getJMenuItem1()Ljavax/swing/JMenuItem; getJMenuItem2 getJMenuItem3 getJMenuItem4 getJMenuItem5 getJMenuItem6hideConnectionStatusPanedisplayConnectionStatusPanedisplaySharePanelpanelinitSharePanelinitConnectionStatusPanelinitAboutWindow getJMenu3 getJMenuItem7 getJMenuItem8 loadSettings saveSettingsmain([Ljava/lang/String;)Vex Ljava/lang/InterruptedException;args[Ljava/lang/String; access$0009(Lcom/superhac/JXBStreamer/Gui/Main;)Ljavax/swing/JFrame;x0 access$100P(Lcom/superhac/JXBStreamer/Gui/Main;)Lcom/superhac/JXBStreamer/Core/XBMSPServer; SourceFile Main.java )com/superhac/JXBStreamer/Core/XBMSPServer javax/swing/JFramejava/awt/Dimension y z{ |{ JXBStreamer }~    *com/superhac/JXBStreamer/Gui/MainStatusBar   java/awt/Color    South   javax/swing/JPaneljava/awt/BorderLayout javax/swing/JMenuBar  javax/swing/JMenuFile ~ java/awt/FontSamanata    Server Help javax/swing/JMenuItemDebug#com/superhac/JXBStreamer/Gui/Main$1 InnerClasses  About#com/superhac/JXBStreamer/Gui/Main$2 Start/Stop#com/superhac/JXBStreamer/Gui/Main$3Settings#com/superhac/JXBStreamer/Gui/Main$4 Save Settings#com/superhac/JXBStreamer/Gui/Main$5Exit#com/superhac/JXBStreamer/Gui/Main$6     Center'com/superhac/JXBStreamer/Gui/SharePanel  (com/superhac/JXBStreamer/Gui/StatusPanel(com/superhac/JXBStreamer/Gui/AboutWindow View  Connections#com/superhac/JXBStreamer/Gui/Main$7Shares#com/superhac/JXBStreamer/Gui/Main$80com/superhac/JXBStreamer/Gui/SaveAndLoadSettings  java/lang/Thread#com/superhac/JXBStreamer/Gui/Main$9   java/lang/InterruptedException Menu.selectionBackground MenuItem.selectionBackgroundTree.selectionBackgroundTable.selectionBackgroundComboBox.selectionBackground!com/superhac/JXBStreamer/Gui/Main java/lang/Object(II)VsetPreferredSize(Ljava/awt/Dimension;)VsetMinimumSizesetTitle(Ljava/lang/String;)VsetDefaultCloseOperation(I)VsetContentPane(Ljava/awt/Container;)V setJMenuBar(Ljavax/swing/JMenuBar;)VsetLocationRelativeTo(Ljava/awt/Component;)V.(Lcom/superhac/JXBStreamer/Core/XBMSPServer;)VblackLjava/awt/Color; setBackground(Ljava/awt/Color;)V(III)V setForegroundgetContentPane()Ljava/awt/Container; getJPaneljava/awt/Containeradd)(Ljava/awt/Component;Ljava/lang/Object;)Vpack setLayout(Ljava/awt/LayoutManager;)V((Ljavax/swing/JMenu;)Ljavax/swing/JMenu;setText(Ljava/lang/String;II)VsetFont(Ljava/awt/Font;)V0(Ljavax/swing/JMenuItem;)Ljavax/swing/JMenuItem;&(Lcom/superhac/JXBStreamer/Gui/Main;)VaddActionListener"(Ljava/awt/event/ActionListener;)V isVisible()Z setVisible(Z)V removeAllrepaintsharesLjava/util/ArrayList;(Ljava/util/ArrayList;)V4()Lcom/superhac/JXBStreamer/Gui/SaveAndLoadSettings;(Ljava/lang/Runnable;)Vstartsleep(J)Vjavax/swing/UIManager getDefaults()Ljavax/swing/UIDefaults;javax/swing/UIDefaultsput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;!g******** * * * * *****Y***V? "!'#,%1'6);+@9E;J=O@ZD^FbGfJ g<**Y*Y*b*Y X**** !**"#*$*%Y*&'*()**Yt!+,*-*'./0*1*2*$**3*NRST&U:VCWKYVZa[i^x_`bfijmps C*:*4Y5*6Y78*Y X9*(:*|}~ 4> CQ*H*;Y<*(=**>?W**@?W**A?W**B?W*"(4@L Qj*a*CYD*EF**Yt!+G*(H*IYJKL**MNW**ONW*& 0:MYe jj*a*CYD*PF*(H**Yt!+G*IYJKL**QNW**RNW*& %:MYe jj*a*CYD*SF*(H**Yt!+G*IYJKL**TNW**UNW*& %:MYe ja* X*VYW * XY* *Yt!+Z* IYJ K[* (\* ]Y*^_* "0CM\ aa* X*VYW * `Y* *Yt!+Z* IYJ K[* (\* aY*b_* "0CM\ aa* X*VYW * cY* (\* IYJ K[* *Yt!+Z* dY*e_* "%8M \$ aa* X*VYW * fY* (\* IYJ K[* *Yt!+Z* gY*h_* "-./0%182M3\H aa* X*VYW * iY* (\* IYJ K[* *Yt!+Z* jY*k_* "QRST%U8VMW\] aa*X*VYW*lY*(\*IYJ K[**Yt!+Z*mY*n_*"fghi%j8kMl\u aB*op9*oq*-r*-*'./0*s*2& y z{|/~6=@A Be*op*-r*tuq*-*'./0*-*ov0*oq*'.q*s*2.    3CKV]d eV*tuL+p*-r*oq*-*'./0*-+v0+q*s*2. "5BGNUVN[%*t*wY*xyzt*tuq$ %X"*o*{Y*|}o*oq! ": *~Y    j*a*CYD*F*(H**Yt!+G*IYJKL**NW**NW*& %:MYe ja*X*VYW*Y*(\*IYJ K[**Yt!+Z*Y*_*"%8M\ aa*X*VYW*Y**Yt!+Z*IYJ K[*(\*Y*_*"0CM\ ac)*Yx**xx*x*Yx ( )6*x   YYL*Yt!+W*Yt!+W*Yt!+W*Yt!+W*Yt!+WY.  !2"I#`$w%(*/* /* BJ ]adgjmJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$3.class0000700000175000017500000000314610540073072025203 0ustar sjscottsjscott1] ) * '+ ,- ,. '/ '0 12 34 ,5 16 ,7 18 ,9 ,: ';<=>this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$3;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod? @A  B CDE FG HB IB JKL MN OPjava/util/ArrayList QR ST UV WX YZ [B \B#com/superhac/JXBStreamer/Gui/Main$3java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem3()Ljavax/swing/JMenuItem;()V access$100P(Lcom/superhac/JXBStreamer/Gui/Main;)Lcom/superhac/JXBStreamer/Core/XBMSPServer;)com/superhac/JXBStreamer/Core/XBMSPServerisServerRunning()Z stopServerhideConnectionStatusPanesettings2Lcom/superhac/JXBStreamer/Gui/SaveAndLoadSettings;0com/superhac/JXBStreamer/Gui/SaveAndLoadSettingssharesLjava/util/ArrayList;clone()Ljava/lang/Object;setVirtualRoot(Ljava/util/ArrayList;)VenableAutoDiscoveryZsetAutoDiscoveryEnabled(Z)V portNumberIsetPort(I)V startServerdisplayConnectionStatusPane 4 *+*    !u***V** ** *****   !;Ocmt!uu"#$%&'( JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/RemindTask.class0000700000175000017500000000126010540073072026224 0ustar sjscottsjscott1     keepRunningZcaller5Lcom/superhac/JXBStreamer/Gui/ConnectionStatusTabMod;8(Lcom/superhac/JXBStreamer/Gui/ConnectionStatusTabMod;)VCodeLineNumberTableLocalVariableTablethis)Lcom/superhac/JXBStreamer/Gui/RemindTask;run()V SourceFileConnectionStatusTabMod.java    'com/superhac/JXBStreamer/Gui/RemindTaskjava/util/TimerTask3com/superhac/JXBStreamer/Gui/ConnectionStatusTabModupdate    O***+WT XZ  6* _a JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SharePanel$2.class0000700000175000017500000000213510540073072026335 0ustar sjscottsjscott17  ! "# "$% &'()this$0)Lcom/superhac/JXBStreamer/Gui/SharePanel;,(Lcom/superhac/JXBStreamer/Gui/SharePanel;)VCodeLineNumberTableLocalVariableTablethis InnerClasses+Lcom/superhac/JXBStreamer/Gui/SharePanel$2;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFileSharePanel.javaEnclosingMethod* +, - ./0 12 34,com/superhac/JXBStreamer/Gui/ShareTableModel 56)com/superhac/JXBStreamer/Gui/SharePanel$2java/lang/Objectjava/awt/event/ActionListener'com/superhac/JXBStreamer/Gui/SharePanel getJButton()Ljavax/swing/JButton;()V access$000?(Lcom/superhac/JXBStreamer/Gui/SharePanel;)Ljavax/swing/JTable;javax/swing/JTablegetSelectedRow()IgetModel ()Ljavax/swing/table/TableModel;removeSharePath(I)V     4 *+*  e)***()) JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SettingsWindow$2.class0000700000175000017500000000170010540073072027300 0ustar sjscottsjscott1,     !"#this$0-Lcom/superhac/JXBStreamer/Gui/SettingsWindow;0(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;)VCodeLineNumberTableLocalVariableTablethis InnerClasses/Lcom/superhac/JXBStreamer/Gui/SettingsWindow$2;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFileSettingsWindow.javaEnclosingMethod$ %&  ' ()* +'-com/superhac/JXBStreamer/Gui/SettingsWindow$2java/lang/Objectjava/awt/event/ActionListener+com/superhac/JXBStreamer/Gui/SettingsWindow getJButton1()Ljavax/swing/JButton;()V access$100D(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;)Ljavax/swing/JDialog;javax/swing/JDialogdispose    4 *+*    C *     JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/MainStatusBar.class0000700000175000017500000000516410540073072026707 0ustar sjscottsjscott1 3Q 2R 2S 2T 2UV QW X YZ Q[ \] ^ _ ` ab Q cd Q ef g a h i 2j klK m *_n *\ op qr *Q *s *gt *u *avwx RemindTask InnerClassesserver+Lcom/superhac/JXBStreamer/Core/XBMSPServer;jPanelLjavax/swing/JPanel;serverStatusjTextFieldLjavax/swing/JTextField;jLabelLjavax/swing/JLabel;.(Lcom/superhac/JXBStreamer/Core/XBMSPServer;)VCodeLineNumberTableLocalVariableTablethis,Lcom/superhac/JXBStreamer/Gui/MainStatusBar;timerLjava/util/Timer; getJPanel()Ljavax/swing/JPanel; flowLayoutLjava/awt/FlowLayout;update()VgetJTextField1()Ljavax/swing/JTextField; SourceFileMainStatusBar.java >L 89 :; <= 67java/util/Timer5com/superhac/JXBStreamer/Gui/MainStatusBar$RemindTask >y z{javax/swing/JLabelServer Status: |}java/awt/Color >~  java/awt/FlowLayout javax/swing/JPanel MN > Running.. Stopped Ljavax/swing/JTextField Is the server running? }-----*com/superhac/JXBStreamer/Gui/MainStatusBarjava/lang/Object[(Lcom/superhac/JXBStreamer/Gui/MainStatusBar;Lcom/superhac/JXBStreamer/Gui/MainStatusBar;)VscheduleAtFixedRate(Ljava/util/TimerTask;JJ)VsetText(Ljava/lang/String;)V(III)V setForeground(Ljava/awt/Color;)VblackLjava/awt/Color; setBackground setAlignment(I)Vjavax/swing/BorderFactorycreateEtchedBorder(I)Ljavax/swing/border/Border; setBorder(Ljavax/swing/border/Border;)V setLayout(Ljava/awt/LayoutManager;)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)V)com/superhac/JXBStreamer/Core/XBMSPServerisServerRunning()ZRED revalidate setEditable(Z)VsetToolTipText!236789:;<=>?@4*****+YM,Y**   A"  3B 4CD467 EFGH@** Y**Yt!*YL+*Y***+**** *A:#$%&0':(B)G*R+],g-o.{/1BBEIJCDKL@A*!*Y"#$*%&*'$*(&*)A"6 89#:&=0>9A@CB ACDMN@X*O**Y+*,*-*./*0*Yt!$*1&*A& _`ab"c+d5eJfShB XCDOP5 24JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$1.class0000700000175000017500000000174010540073072025177 0ustar sjscottsjscott16  !"#  $ %&'()this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$1;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod* +, -. /0(com/superhac/JXBStreamer/Gui/DebugWindow 123 45#com/superhac/JXBStreamer/Gui/Main$1java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem1()Ljavax/swing/JMenuItem;()V#com/superhac/JXBStreamer/Core/DebugdebugZ getJFrame()Ljavax/swing/JFrame;javax/swing/JFrame setVisible(Z)V     4 *+*  OY JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/StatusPanel$1.class0000700000175000017500000000227310540073072026560 0ustar sjscottsjscott1@ , - . /0 1 2 345serialVersionUIDJ ConstantValueڎthis$0*Lcom/superhac/JXBStreamer/Gui/StatusPanel;-(Lcom/superhac/JXBStreamer/Gui/StatusPanel;)VCodeLineNumberTableLocalVariableTablethis InnerClasses,Lcom/superhac/JXBStreamer/Gui/StatusPanel$1;getTableCellRendererComponent@(Ljavax/swing/JTable;Ljava/lang/Object;ZZII)Ljava/awt/Component;tableLjavax/swing/JTable;valueLjava/lang/Object; isSelectedZhasFocusrowIcol SourceFileStatusPanel.javaEnclosingMethod6 78  9 :; <=java/awt/Color > ?= *com/superhac/JXBStreamer/Gui/StatusPanel$1*javax/swing/table/DefaultTableCellRenderer(com/superhac/JXBStreamer/Gui/StatusPanel getJTable()Ljavax/swing/JTable;()VblackLjava/awt/Color; setBackground(Ljava/awt/Color;)V(III)V setForeground   4 *+*X  '**Yt!*+,^adH''' '!"'#"'$%'&%'()*+  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler$1.class0000700000175000017500000000234010540073072031260 0ustar sjscottsjscott19 % & ' () * +,-. val$this$0*Lcom/superhac/JXBStreamer/Gui/DebugWindow;this$10 WindowHandler InnerClasses8Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler;e(Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler;Lcom/superhac/JXBStreamer/Gui/DebugWindow;)VCodeLineNumberTableLocalVariableTablethis:Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler$1;write(I)VbI([BII)V[Bofflen SourceFileDebugWindow.javaEnclosingMethod 1  2 34java/lang/String 5 678com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler$1java/io/OutputStream86com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler-(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)V()VoutputLjavax/swing/JTextArea;javax/swing/JTextAreaappend(Ljava/lang/String;)V(com/superhac/JXBStreamer/Gui/DebugWindow    9*+*,*v 5ta*Y+ xy* !"# $ /JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SettingsWindow$1.class0000700000175000017500000000202710540073072027302 0ustar sjscottsjscott10     !"#$%this$0-Lcom/superhac/JXBStreamer/Gui/SettingsWindow;0(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;)VCodeLineNumberTableLocalVariableTablethis InnerClasses/Lcom/superhac/JXBStreamer/Gui/SettingsWindow$1;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFileSettingsWindow.javaEnclosingMethod& '( ) *+ ,-. /)-com/superhac/JXBStreamer/Gui/SettingsWindow$1java/lang/Objectjava/awt/event/ActionListener+com/superhac/JXBStreamer/Gui/SettingsWindow getJButton()Ljavax/swing/JButton;()V access$0021(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;Z)Z access$100D(Lcom/superhac/JXBStreamer/Gui/SettingsWindow;)Ljavax/swing/JDialog;javax/swing/JDialogdispose    4 *+*   P*W*  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/AboutWindow.class0000700000175000017500000001265610540073072026440 0ustar sjscottsjscott1 [ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z        Z    # % # # Z # , Z Z Z Z Z Z Z Z 6 6 : 6 [ B 6 Z I I I I I I Q I I Z Z IjFrameLjavax/swing/JFrame; jContentPaneLjavax/swing/JPanel;jPaneljPanel1jLabelLjavax/swing/JLabel;jPanel2jLabel1jPanel3jLabel2jPanel4jLabel3jPanel5jLabel4jPanel6 jTextAreaLjavax/swing/JTextArea;jPanel7 jTextArea1jPanel8 jTextArea2()VCodeLineNumberTableLocalVariableTablethis*Lcom/superhac/JXBStreamer/Gui/AboutWindow; getJFrame*(Ljavax/swing/JFrame;)Ljavax/swing/JFrame;parentgetJContentPane()Ljavax/swing/JPanel; getJPanel getJPanel1 getJPanel2 getJPanel3 getJPanel4 getJPanel5 getJPanel6 getJTextArea()Ljavax/swing/JTextArea; getJPanel7 getJTextArea1 getJPanel8 getJTextArea2 SourceFileAboutWindow.java st \] ^_ `_ a_ bc d_ ec f_ gc h_ ic j_ kc l_ mn o_ pn q_ rnjavax/swing/JFrame  JXBStreamer java/awt/Dimension s }~ tjavax/swing/JPaneljava/awt/BorderLayout ~North javax/swing/BoxLayout s ~ ~ ~ ~ ~ ~ ~ ~javax/swing/JLabelJXBStreamer V 1.0  java/awt/FontDialog s  By SuperHacemail: SuperHac007@gmail.comweb: http://www.SuperHac.comjavax/swing/ImageIcon ./com/superhac/JXBStreamer/Gui/images/about.jpg s  javax/swing/JTextArea@Special thanks to PuhPuh for the great documentation on XBMSP...   java/awt/Color s   DGreetings: ThongN, TimmyD, BigBrother,SeniorBrother, and JrBrother. vCopyright (C) 2006 by SuperHac, All Rights Reserved. Permission to use JXBStreamer for any purpose is hereby granted.(com/superhac/JXBStreamer/Gui/AboutWindowjava/lang/Object setResizable(Z)VsetTitle(Ljava/lang/String;)V(II)VsetMinimumSize(Ljava/awt/Dimension;)VsetDefaultCloseOperation(I)VsetSizesetContentPane(Ljava/awt/Container;)VsetLocationRelativeTo(Ljava/awt/Component;)Vpack setLayout(Ljava/awt/LayoutManager;)VsetPreferredSizeadd)(Ljava/awt/Component;Ljava/lang/Object;)V(Ljava/awt/Container;I)VsetText(Ljava/lang/String;II)VsetFont(Ljava/awt/Font;)VgetClass()Ljava/lang/Class;java/lang/Class getResource"(Ljava/lang/String;)Ljava/net/URL;(Ljava/net/URL;)VsetIcon(Ljavax/swing/Icon;)VsetRowssetWrapStyleWord setEditable(III)V setBackground(Ljava/awt/Color;)V setLineWrap!Z[\]^_`_a_bcd_ecf_gch_icj_kcl_mno_pnq_rnstud********* * * * * *******vR  "',16;@EJOTY^ w dxyz{ur*i*Y***Y,**Y5 ** *+!*"*v. '()*#+7,?-S.^/f0m2wrxyr|]}~uF*=*#Y$*%Y&'*Y,(**)*+*v;<= >4?AAw Fxy~u**#Y$*,Y*)-'*Y"(**.+**/+**0+**1+**2+**3+**4+**5+*v6 JKL%M9NEOQP]QiRuSTUWw xy~uJ*A*6Y7*89*:Y;<=*#Y$**+*v`abc.d9eEgw Jxy~uu7*.*6Y7*>9*#Y$**+*vpqrs&t2vw 7xy~uu7* .*6Y7 * ?9*#Y$ * * +* v&2w 7xy~uu7* .*6Y7 * @9*#Y$ * * +* v&2w 7xy~uN* E*6Y7*A9*BY*CDEFG*#Y$ * *+* v2=Iw Nxy~uY#**#Y$**H+*vw #xyuj*a*IYJ*KL*M*Y#N*O*P*QYRS*T*v* #6>F]ew jxy~uY#**#Y$**U+*vw #xyuj*a*IYJ*QYRS*VL*P*T*M*O*Y#N*v* )2:BJRew jxy~uY#**#Y$**W+*vw #xyu}*t*IYJ*QYRS*XL*P*T*M*O*:Y; <Y*Y2N*v. )2:BJRexw }xyJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler.class0000700000175000017500000000233310540073072031135 0ustar sjscottsjscott15 " #$ # %& ( ) * +-.outputLjavax/swing/JTextArea;this$0*Lcom/superhac/JXBStreamer/Gui/DebugWindow;-(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)VCodeLineNumberTableLocalVariableTablethis WindowHandler InnerClasses8Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler; getJTextArea()Ljavax/swing/JTextArea;publish (Ljava/util/logging/LogRecord;)VrecordLjava/util/logging/LogRecord; SourceFileDebugWindow.java  /javax/swing/JTextArea 8com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler$1 0 12  3/46com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandlerjava/util/logging/StreamHandler()Ve(Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler;Lcom/superhac/JXBStreamer/Gui/DebugWindow;)VsetOutputStream(Ljava/io/OutputStream;)Vflush(com/superhac/JXBStreamer/Gui/DebugWindow  X"*+**Y*Y*+r os!| "/* F *+ *     ! ,JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/MainStatusBar$RemindTask.class0000700000175000017500000000136310540073072030732 0ustar sjscottsjscott1    caller,Lcom/superhac/JXBStreamer/Gui/MainStatusBar;this$0[(Lcom/superhac/JXBStreamer/Gui/MainStatusBar;Lcom/superhac/JXBStreamer/Gui/MainStatusBar;)VCodeLineNumberTableLocalVariableTablethis RemindTask InnerClasses7Lcom/superhac/JXBStreamer/Gui/MainStatusBar$RemindTask;run()V SourceFileMainStatusBar.java    5com/superhac/JXBStreamer/Gui/MainStatusBar$RemindTaskjava/util/TimerTask*com/superhac/JXBStreamer/Gui/MainStatusBarupdate    K*+**, J KM 6* RV  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/ConnectionStatusTabMod.class0000700000175000017500000000600410540073072030556 0ustar sjscottsjscott1 +WXYZ[\]^ *_ *` ab cd *ef W *gh i j k lm lno p q r st u vw W xy z k{ |} *~serialVersionUIDJ ConstantValueE1clientsLjava/util/ArrayList; SignatureLLjava/util/ArrayList;server+Lcom/superhac/JXBStreamer/Core/XBMSPServer;timerLjava/util/Timer;colNames[Ljava/lang/String;.(Lcom/superhac/JXBStreamer/Core/XBMSPServer;)VCodeLineNumberTableLocalVariableTablethis5Lcom/superhac/JXBStreamer/Gui/ConnectionStatusTabMod;ss,Lcom/superhac/JXBStreamer/Core/ServerStatus; getColumnName(I)Ljava/lang/String;colI getRowCount()IgetColumnCount getValueAt(II)Ljava/lang/Object;bytesrowclient5Lcom/superhac/JXBStreamer/Core/ConnectedClientStatus;isCellEditable(II)Zupdate()V SourceFileConnectionStatusTabMod.java ;Tjava/lang/StringIP LastCommand Dir Handles File Handles Transfer RateClient Version 9: 56  12java/util/Timer 78'com/superhac/JXBStreamer/Gui/RemindTask ;  I 3com/superhac/JXBStreamer/Core/ConnectedClientStatus I I java/lang/StringBuilder /KBps 0 KBps  T3com/superhac/JXBStreamer/Gui/ConnectionStatusTabMod$javax/swing/table/AbstractTableModel)com/superhac/JXBStreamer/Core/XBMSPServergetServerStatus.()Lcom/superhac/JXBStreamer/Core/ServerStatus;*com/superhac/JXBStreamer/Core/ServerStatus getClients()Ljava/util/ArrayList;8(Lcom/superhac/JXBStreamer/Gui/ConnectionStatusTabMod;)VscheduleAtFixedRate(Ljava/util/TimerTask;JJ)VtoString()Ljava/lang/String;java/util/ArrayListsizeget(I)Ljava/lang/Object; getSourceIPgetLastClientCommandgetOpenDirectoryHandlersjava/lang/IntegervalueOf(I)Ljava/lang/Integer;getOpenFileHandlersgetTransferedBytesSec()Jappend(J)Ljava/lang/StringBuilder;-(Ljava/lang/String;)Ljava/lang/StringBuilder;getClientVersionfireTableDataChanged!*+,-./123456789:;<=\**YSYSYSYSYSYS *+ + M*, *Y*Y* >"+05= H![#? \@A\565'BCDE=> * 2>&? @A FGHI=2* >(? @AJI=0* >)? @AKL=~* Nn',19Ai-----\7  Y!m"#$%&-'(>. , .4193>5F7N:Z;s=v@{C?4U&M-~@A~NG~FG rOPQR=@>F? @ANGFGST=U* L*+ *)>JKMN?@A BCUVJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/DirFilter.class0000700000175000017500000000077510540073072026061 0ustar sjscottsjscott1  ()VCodeLineNumberTableLocalVariableTablethis(Lcom/superhac/JXBStreamer/Gui/DirFilter;accept(Ljava/io/File;)ZaLjava/io/File; SourceFileFileTreeModel.java  &com/superhac/JXBStreamer/Gui/DirFilterjava/lang/Objectjava/io/FileFilter java/io/File isDirectory()Z /*    9+   JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$9.class0000700000175000017500000000164210540073072025210 0ustar sjscottsjscott16 !  " #$ %&'()*()VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$9;runsplashLjavax/swing/JWindow;ex Ljava/lang/InterruptedException; SourceFile Main.javaEnclosingMethod+ ,- )com/superhac/JXBStreamer/Gui/SplashScreen ./0 123 45java/lang/InterruptedException#com/superhac/JXBStreamer/Gui/Main$9java/lang/Objectjava/lang/Runnable!com/superhac/JXBStreamer/Gui/Mainmain([Ljava/lang/String;)V getJWindow()Ljavax/swing/JWindow;javax/swing/JWindow setVisible(Z)Vjava/lang/Threadsleep(J)V   /* ~ YL++L       JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/DebugWindow.class0000700000175000017500000000616610540073072026413 0ustar sjscottsjscott1 +S +T +U ,V +W +X +YZ [ \] \^ _`a Vb c de f g h +i jk [ mn Vo p q +r st "V "u v _wx 'V +v 'yz{ WindowHandler InnerClassesjFrameLjavax/swing/JFrame; jContentPaneLjavax/swing/JPanel; jTextAreaLjavax/swing/JTextArea; jScrollPaneLjavax/swing/JScrollPane;loggerLjava/util/logging/Logger;st8Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler;()VCodeLineNumberTableLocalVariableTablethis*Lcom/superhac/JXBStreamer/Gui/DebugWindow; getJFrame()Ljavax/swing/JFrame;getJContentPane()Ljavax/swing/JPanel; getJTextArea()Ljavax/swing/JTextArea;getJScrollPane()Ljavax/swing/JScrollPane; access$000d(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)Lcom/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler;x0 access$100F(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)Ljava/util/logging/Logger; access$200@(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)Ljavax/swing/JFrame; SourceFileDebugWindow.java /0 78 9: ;< 12 34 566com/superhac/JXBStreamer/Gui/DebugWindow$WindowHandler ;|} ~  javax/swing/JFramejava/awt/Dimension ; Debug DE *com/superhac/JXBStreamer/Gui/DebugWindow$1 javax/swing/JPaneljavax/swing/BoxLayout ; HI javax/swing/JTextArea FG javax/swing/JScrollPane (com/superhac/JXBStreamer/Gui/DebugWindowjava/lang/Object-(Lcom/superhac/JXBStreamer/Gui/DebugWindow;)V#com/superhac/JXBStreamer/Core/DebugdebugZ getLogger()Ljava/util/logging/Logger;java/util/logging/LoggersetUseParentHandlers(Z)V(II)VsetSize(Ljava/awt/Dimension;)VsetTitle(Ljava/lang/String;)VsetMinimumSizesetDefaultCloseOperation(I)VsetContentPane(Ljava/awt/Container;)VaddWindowListener"(Ljava/awt/event/WindowListener;)V(Ljava/awt/Container;I)V setLayout(Ljava/awt/LayoutManager;)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)VsetPreferredSize addHandler(Ljava/util/logging/Handler;)VsetViewportView(Ljava/awt/Component;)V!+,/0123456789:;<=8******Y*  * * >*  $(/!7"? 8@ABC=j*a* Y*Ye**YX****Y**>& *+,&-/.C/K0V1e<? j@ADE=p6*-*Y*Y*** !*>EFG%H1J? 6@AFG=A*8*"Y#*YX$**%**&*>STU&X1Y<\? A@AHI=X"**'Y(**)**>efgi? "@AJK=/*>? LAMN=/*>? LAOP=/*>? LAQR.+-JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$6.class0000700000175000017500000000202610540073072025202 0ustar sjscottsjscott16    !" !# $%&'(this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$6;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod) *+ , -./ 01 2,3 45#com/superhac/JXBStreamer/Gui/Main$6java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem6()Ljavax/swing/JMenuItem;()V access$100P(Lcom/superhac/JXBStreamer/Gui/Main;)Lcom/superhac/JXBStreamer/Core/XBMSPServer;)com/superhac/JXBStreamer/Core/XBMSPServerisServerRunning()Z stopServerjava/lang/Systemexit(I)V    4 *+*m  \* *n oqr JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/SharePanel$1.class0000700000175000017500000000226510540073072026340 0ustar sjscottsjscott1@ , - . /0 1 2 345serialVersionUIDJ ConstantValueGythis$0)Lcom/superhac/JXBStreamer/Gui/SharePanel;,(Lcom/superhac/JXBStreamer/Gui/SharePanel;)VCodeLineNumberTableLocalVariableTablethis InnerClasses+Lcom/superhac/JXBStreamer/Gui/SharePanel$1;getTableCellRendererComponent@(Ljavax/swing/JTable;Ljava/lang/Object;ZZII)Ljava/awt/Component;tableLjavax/swing/JTable;valueLjava/lang/Object; isSelectedZhasFocusrowIcol SourceFileSharePanel.javaEnclosingMethod6 78  9 :; <=java/awt/Color > ?= )com/superhac/JXBStreamer/Gui/SharePanel$1*javax/swing/table/DefaultTableCellRenderer'com/superhac/JXBStreamer/Gui/SharePanel getJTable()Ljavax/swing/JTable;()VblackLjava/awt/Color; setBackground(Ljava/awt/Color;)V(III)V setForeground   4 *+*  '**Yt!*+,H''' '!"'#"'$%'&%'()*+  JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/Main$7.class0000700000175000017500000000144210540073072025204 0ustar sjscottsjscott1&    this$0#Lcom/superhac/JXBStreamer/Gui/Main;&(Lcom/superhac/JXBStreamer/Gui/Main;)VCodeLineNumberTableLocalVariableTablethis InnerClasses%Lcom/superhac/JXBStreamer/Gui/Main$7;actionPerformed(Ljava/awt/event/ActionEvent;)VeLjava/awt/event/ActionEvent; SourceFile Main.javaEnclosingMethod! "#  $ %$#com/superhac/JXBStreamer/Gui/Main$7java/lang/Objectjava/awt/event/ActionListener!com/superhac/JXBStreamer/Gui/Main getJMenuItem7()Ljavax/swing/JMenuItem;()VdisplayConnectionStatusPane   4 *+*    @*   JXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/images/0000700000175000017500000000000010540073072024377 5ustar sjscottsjscottJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/images/P7262531.JPG0000700000175000017500000012464210540073072025726 0ustar sjscottsjscottJFIFC  !"$"$C" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{4 nhbj:J(f:R.J:3KEu/~)w J*hea{ٮ~y \|1z)n&#NJ\(Gm+f;*bȫGԊ\,i aU|Ucyj湈1M=Z<{ѫѠ\yx&oi2=̎p5̟YV$ I|VWی&q«HN?fk?Rj~p/4rG|x9 S#rn8عKZ^q޼MsU{0 j/_]J~i1s]W2u Ws li?1s[R^ۏ6/[ mIݤ"\[h\V3߅5E_xv%yb ݪ䞝}(h9!O0O ߎk?ZpO١93oYc_Қ|mGN^p})D\Ϲ? mS?֛'&6Pp}KhfImÊ|.ΞO_!ź?}ҹіʆ>T#u7@jy*E1?SKVTH|(UҗK|ec֦[h ]ʆ,qͭhkz Mz쑈P$矺:fS\!}Ym#'l=9&oޑkV=${s>椚(Y&@ru(ʻ 읮\H~j&9?!b~wz6@GҔZ°l} ,VGR1@ (V-9B*K6AqLDcҚ H(G?MQR&bi`Ees!=6?fQvٷ?.rkIAYJsݮq=֟#0bp z]aƗ񴖺 ĊNũֿ <_q?p)ϧs=վMcޡ6 k#98g=n~%v\G-#8d~uKdqr2^¥X ޽f"+3H q-f ۘem86`@)7ڦKI m'o<9r)jngc!-!~.v+OTL[dvI^jkaqsO.+BO.LEj_=T7OZf=-u GRuEIgl3izJGx'TW8r1:gVC q$l3IQҾѨi4[ )<(A#Xv_r#ۣm%*Ĉ䈜+­/M*#2pz$q^im"T*F>5moV _"kU^sɫiX-vkDFR"vāHP0p*d< (v TUQR9BE ӭ$$4тvO^3_;g q=onh r9DFeN3ڜds[9ܻA^bͲ)qwEmgMd¼Cp}k/i-eBNJr=k{&ӱȥsI# q ǯ_ZױJ̯UMz겦e`!\׸mAqkg6.mH`+#u k;3MPC4-.9pMHr-eoDcP\HԱH:RJۤf4vX]wy@p92 Mn? ~Fy.~J?1PQ+?zݴYD1mA9?m]rNY>~ b *bmxSY[(c;ZFG~ >RRծɒyܑ@9\i^$-|<:|da Pz֦l!ѵ\ gf#yjhZ*}*K-zKk7G$5b~(=5Sd)0ھ*!L_\|b?jAؔo?S}.?S~6:5ޘnEm.3ؓ_I=tۦ_Nj R|s1y)-44G3)~ĭb?m:OD2ū4DRja|}w-Ν6=j݁54^*gsUUøMjuE]Kwbx&ฉ3u*}<]7I5C}Uau/Vd!Q|x?d1NQaRGȝRC*32I=wWc'(ןo_oZM 4> }Kem86sIn9]ڱo~.ӓW%ޗ9+&>#F E*.<0.ۍ5TϠmr^jc{~%#`sF|&m4FԨף:^ &{c[k {dS=j A) :ZokKfS1 {qZ_4k:?h }:0|'N0QV3M^]z&+ ' ZEAL^'=^kҼI{?ppN18xy$?|Ch5/ B=F8Px`d F֮/+/A!۰6=O\Q:1*1}Vp e}Oyfx<=zNCaAb׬xՎ p8 7Q9}^@5BI?2_)w62QX ރ˃o~i ORsur?o> xʣu'9漻NtҦa۝֕n}[|,rv|T|OH1p^)v?xJi"rt?: ,/Utqt<ϙ3 d?J\W |gʹ1"Sӭ;s!83C"%hb`c{Zۿy $]9S ~gT\'֢}Ui~ƺ tXs#C8^raNNZN):(Qڞ)SJQUV \735djJF?QN;Kci֞A dWYԞ>@TjO!GAeҫɴ9<Z#.Iz zUFF׃59.dRIBSx^sLWQMc45+i\ܤl`ׁݺCBI׆N-A=/x( 1qܪw튩D?t뗲~woT:uگWsII_cyxOЫdl95ĺ";eX  $OJMv Oj^2[KJ9Fr8g+ښc+WiRm]}4'!ʹhNTNm“L֭/fX8`\Yt9N2Z_]?.Y~♡QjiR>]鍃bG+֮{٤o2sC?k𖯤ZE敠u& Y6cQ×:T 2[6Ï%q:p)%og}Z4kNOMG( bVk{պ ` W;gMG_;wY2{|V;YXzQҜ`UNn^o -NĄ:2$cFrpm?]kn#~ҵ?gm*MQ|XXϧKf Wzm]  ~dU<<a'iOz?;Sd[*wTU=6 xMχN ɒ-<ʟw/K*Y[3n9_]x!y+GG`KH98s*iI*hy˚ֿo> xWPE$嬮GGvqۨ RuCJ?w"{ֻ ~(iW×Kp6;^6 Qv> ozTW :4GD1 OQ=iWO+ф?c߯bj?/mfT+ll<ѥכYql9sʻWVᨴ ]jWqw1l1bo<9CPDv?ʪTe3)5/gx%wR x`c]ΝYހbr $a |=xRUJ'+ӡz7(jҳn're޿(T>FS׌\cx 眅C=c?q%Բem ΣGQ=*iӋyn|<|Emb-nFw_'|J^j[K$HwRܔ=vߎA!Ϩ7`6aҖg=Q~5{_i~?&ZʹYWRñ4Qԗ3߯rT$˳_y_cVg_YaO:0p?Ug"Z^n``4r?+ =;&&Xe2>8g|Z:̋ Indby#Ak:w qodAy]SRHܻd.a$J\Wzl i 3Bȉ*Ѩ獣D`AJ;[bJ7e}Z')6ռ)!?x-nfa5v(gIYl<1YŴ\*J:,cGঽǾ9|%e+]OתdHԟ5gsuV3<,P਑)8P{dMg*~۩FW>{zw>m? _J7ňׯjH~9fP=0#~ |:Gnȟ g˱`{IOX%ۏ'7R۳+K#݈<H9SWVg Rw+_i1F`bc *tvU<Ʋ?iE[#w sg/!4S̶`snhᗣ:Gsm>[YV ZdC0'PyR[=Fz[ =H:w+c,,C`{AϮrztWc]H72?ɮ(VYV/-rd*#`'3^e:E*VslbvAS7cX>}8D.CH6>:c4t٧mo*\`_kmSs}}B!Vaucי~ך 5vHz6BAV<5+B/XGۮY5/?δ4SoI_/)MiPhZ0uj9jE xR1E`Ϳm+| ZgûzF5]ˁ9>2+cKD'xՙҖRltoʐYV˓g[^&I6H8*y?=`kx床,h.W )kk$?(ϡy"nUr#[:̚6,+ -$Z֭3i*i[pfx c?J *c%Z/~*xŚ4^Z69FY G#%Cd㧹҄UjΫ-[OżѰdt8*á'O;(m-hyQRtԥ~GkNJ~$j%4[F.&Y%FV';;H'$cUqN4VBZue7vzO~0B@K"5n['mn?."mC`6qkƗ)*}{u~{y% [Ԏ}ؓYeXV#[̓lኰ`9X:үhZ#u%9sIݞiŖ$[[u(u #33ƞ&^)=VFs#,]sX "cx^i*qҮ.Tqq ]N˕Nٸ#"-X/5Xw*Z\*X_cAkHs˜t&JMlIj0nNJٶx8&mWoV D~`Ic[;iv1Oz.Y s% lgnXj RZ1>VBW?7 ]Km>*f qsC 03^szoHa9q*ˎp23 ~n=o#qIIa4|;id*H@sV%Ǵy*'FTO$?dto)R*'x$yG큣}WwsFĎ^Ҋ2Xx3%ொ&O(<0 4Hn~mX[ƭZp}˵e_G,g!hWO&<֣)fOOhOZjAH+6 ?6QGb֮E_^f-g?UJY?? ƺY-ߣ4Su>28n[!e  c< O,Y73sq$ڦ%9A(ۿUZ\4sm?ևn#w/mG-n?湡}iWՏO: ua ¹KOًvtd_c)?œC?V_4qֹ_Ύ@Qⴠ?0~T[Q9?:kXJom4S޿ά!?q) U)j6eD};~Trz};/,?il8?*pU_ʟ/3:mt?F,:EjLsչT\X>4 AYt=eM9 _3H?5^ʿ[IfU2ǰEO_ )#ú?ԫHdе9; KffYR:zq^1\5 bKdz銵'S7N3QRS_~J>TÁU޵a,wWڝ4ft(G# U񶑪Ximz Icq%䎜 u刽NioIlwa:W 5A[qbx R-kS1;q}&~jst@ߞ֎TOܿа]<-QuKQSH=ɦhSғֵjʿk} j$ʬ/>HQx4{շ^҄P{u> ]KXTe+`d u׮+A*v6Ґ%.T[O7k`9?]m㿥q-D.@2StixًFAYIl`j~2|#Lr=L 9F)h|򕔑:y-ïh_6v'uEQ!1^̤0vg I@Zhjz3jUY3miǷ֑C֤ZSj@>2{*һ\Ovq+J_]#XUoYbz?Һ ᴽ?Th%mߒ±Jڏza?bRu'IQE,.U41HA˸?K{XW!c墶ߕO݃T cG|~DkʕJӌ#+i~kjzW}\4e^g'ժ+I-(XQ]߻sWWhϧpuxOTw>>~]<At?cn(?:ԿB.>3m[\2k@_h:d'8 JO- /?>o>@ۿHtMz׃طVhZ/4}m.򒝗~ =/~決X[)mgX+[7·7V!s<"#A#МmvڴGm 2H:W'yϋEvzonWI&Wd_dLjcQ"±v/Sl5j|^%/%#FMxs0 }s f_N_U{ &OA%]\y9>bIZ9QS{Bש|-ոPKhUD<:| X똢}SFpp_U[:0'R{#mjF9xry=Mam[R]MqrcyS:*{WJ͍ŚFFrOAȬMՄ7X n1ǚOJUV'Oo3Z|w/Ś4sVj75̬(ϥ:NH&SvX!yoI"m W⧍mMa AEy>y9<zS%H?]v &川Sz-ȎE_scK֒[eIq)R28¼|U@,c=j i2 ;+5Q?.+r$"fr ,jmb\Jl+' =Gs0f.;ovv(\rȒ:'fBMz,aڈr6JV Rчp3}bx)c9ZvvE"\u8ߋ:og0nf09_Oˊ1;;H9@|]5Dž5K}ZVpkhuTփE~@V:Jk'[JOO+'Vun U# ݶtͥ\W~o7 /{%ܦ2{{ד_|,?S&Լ!/inūc}5Ч8~Hƽ5RUbfbnd;XGe>ь+.uFξ>r۹L=pG`W3Y[vج)jGl?}U.]PBHw?@BZO$-uA,C+߇Ƹ:з΋iX2F IXg%VxQw4 ܢA 1b-g`S6Wm|gAuCӾ{af㝧}5m0Z-11x_~˺5 5x⸱i6!w83^{xv$Ws|u< ^S<TXnG95]zԱ1S`Zbu"x/ mn܈8m 0WxŞ mW|ĻX|8BGVl녂4WiQvҨFJ 5y (2Mz_{=$yrIq?Z 6*#ۥX@EEʠTluP ax𦭵~Fsa|IujcYc~c?8;>NU22`^>וZ^F ry_8W@u#yvdEq3.p s >&Vܟ]!/TǭAPs iljv4Y2PyQz(H D)ݩ Kc;zFʸAWk6.3\P+Z]LjnIq(v W5jJkf8Fr.J WG+LWGgECIc 2^Ȯd s{gEKeg+Od5ΩeP[o |%VYXN\aN[>{*kyojL9b,ݶQs%y҂FC6Gv cy|=p|pySVs笔Tv%_G*r{akۍG46+w%P;2PbrqvԾmj(};+Iv:J乵>ufU2Sc^*޿vu)9Įw5_jXvgzwI@Gw# mCRISf*:4Ԥw#CP\1dG֢݃GE Q?g 9?}|/U>Һ1+3ϖ5ގH$,Ms4J\mJEni138q+u_"p^k<<׺:WO;:.:IIF/dtRnoc..+x,n65Z]ru>/3T+3)7ҩ8x2jΩ~Vڥkd_{X8ym8aI]7q x>fl& <ͽyghBQ;dYwn^K 9ޥ&nՎvG#(9 k?hF[״ 8NM) X$9ɮLie\uyw^;X[]F9XY_9(—1 9¯/E=mySIh. WLV.>7G[{eb0@na7爼S}E8t3..vP=k.-~OD]/2Hc.E|znA4ZOW"xzɲZX2>T~9xTv_QC^j$6`Ϫω>45dvȋ(B(8'Fx=k|EZ [FS+K̽K7od*N~g4#Vw9Ž?U_g6_& c)\ [[FUgXpGc6W=H<қq J%m2h>vH\ugm=qZE(?D =p+м 6dRdu 9=+ϼ=jē/g|$xѴX_)UDi;U2]QsҿL55CWdq){m^k" nczсF1vvr3޹|-,͚/=R?;9ˉ1,E֩OTOfG͔^ҷ;N=+Ç+$?-b].۹F'gX)⋍6DiO% vF° qD'<>n5tMao%#0C'.A=&koZ K]8yݓHǥssjx8~oG :5{KDYXRN+#uڶ@)X#}q_XkW0G4&4D2[հ9}+_nm^k9ؼRٟ3 );y#o#|ΫUE%OJt,χWc"YS֗D9;Ii|AY'>BXZĒnYB#"tz V e(a ppw{zp׳Dt{ۧ3sR]"K 1֤aEHnSN6h@ZDR~sֽVY~gR vV-q\nrfb d$}h-G*83/ 1O+]bhl=]Rda>k^=FB=c-G(-?s?/Ʃ G㸑 G^>>#þ.|7H"{֬z;s^Lgfy|qe}pG_3o|U{4}*cN^j>RSJ)JA|y]oY[xOSKyUdu|m;G\WO+h~#i~a蚯, qoxgV8!;26sM~NtVCj2%,zU7])qILTXrZl\cXY ;>5޺J6֏ sx\g_U~rN˰c#`} G p2* =L03SpNLl^!۪}? ibR"ב6K1-x Z?ݦ[9䞤h?+HtɁ}"6q+{2=r!i林wڽėMTNj)-s] vm$}T n+*#kKkA<˿4 .ބSKQsJjAX3S'5\VA,1X[b$'^sq\!,W´|+vOU;!B҇}o1i{ JZM!? ZQ<mcWEmbmYp<Ֆ8 zT)f{kqh;{hG>ޛtY̹1(!5uԠ[ZFx*g0YizŴ^k{ŝ8m#߅0m:[Kp`09ċ?0ǯ<ׅ`.;qxyZi'&ºciqrI$rAfxA6G*@Ͻax[⏅$喇}Ȣo2.OU~xA -8#ezs6r|'dkװiw+l/20`Ϊ@ 2Ú8-*O)ot4 .U2þE70ykj#i~VF;vA=ힵ^i>l4KA[Haf`D ?UHUn4k/ܶ7*~:u,OJnz*9R\˯2İxníq05  _3#1_5x|QnSBqBoƾY>WjJN1?hu}N&_LҐ Ftl-q_zo'MϞOym >׮?Z: (i$#Tה_j6#Nj4_xV]AĈX Il )8%dz?㴁H;#!uaJ:oa!׷:6D) F7_0)= ʪ3_-O m1*xo$eNͱwg"b9 g#+/]58ɷz<5UC6ZńQM Mp5-5Nw l!{ UfEyJ t(sz}k$̭h*W˘wa~W o5Z;[m15gpe%UNys撖 U-z?du꼙ǫOZ1g#yq0dWEiH:VEq&cm1Ƞ{Ny+UEQ،FZn$[GO|^#ϋ3wi6 Xc^OqriH}+ o~T1$*wԇFzG?Apz[X]M{G?*̙l}cq,W\,z s[Vk6Y`kmO8F>Ե/j"dmW è>кN׬4FCȌGf#޻֞w>!$8#t2o$/j3|3HثnSE2(bk K*lwBr}u '9#5<i[zQ9Z@=,$vO@9< ˘McTޓ( f9$x89Šb\[[yD8TV.3PS21djA$`P=o'} anAUO_/CVq#G,wYFQ{|2귒n8XcEucjޥm(R|R؞YF:)i|a&{±YUF+kUk{$mVQ66?jE佦G㺳VGETg#_L4=>;U1!#1q9=k<#oxW@2YkqQXBkjTDm|7yu&!l rWEg32ZahJ2nӅ7#k:t{mkMm~ZpUm@0$B6~G_)KYKf?݌TxXWSdP>k,?M?&͟axw}z-Jki5 Y]71lcs^MDAfD#98^!j ?܍ezqsO5M6ͼrDctׂ<ҵZc1%{;>kZ#ƪ  5i%gx"Mt ;M[x|0i}Wɒ+7}i9Q,ypnM ӡt?WS{p5h_h$Bg0<-URm>|!m|dFN4=q ה~:̒twۂ7<좺xCCjNҧ؊$F~Gcp1V7^O7mq,:>p[Q]7"kvufǿ27Q+m6D׵kiE˺XSjݲ,0B.@$rI$i?3j6mhxtU~\}A{7;izf~7s[}P%\[J\2Obh#$}>u-> .o/!v€.mw=^͌iltSd#T`dT|H ,c޶?kxCڶQGK0U8ڥ2xėD&p1#Kc>=1 I|v2r[2p?TG+ˍ}lԵĬ0 ]R%5f^?x%O_4E޵o\6OKx }[8r*B){^uJ[m6K .Wc%sdz)/ [̷qh}>Un_ٚ_ #2}bXKt?n1sT>bܓ]iGũ隀~ ,>D* \t?W?QI=$~v)=e=iW%ISEt:w^n̶J7Z]'Kl!ȣ֦ ı))vڵFIE]k\SrCUM+Uoׯ2MVko-dzqY\ܩzPx3q69-w#wm#?yqe=yI?gZsuzuwMe0 ө̵KˑZ#S%{#XOҬX~ԩpGS4a]?Zͱ$E?x~0jjv7^mlN߅cꎺ5`gٽ?ݏĚfGl ]r >tZG敒Gcxs\B!sr۝G议#D iO\#Rs\>ChȧuJw,1Ķ3ӌ+}t!j]],l$20#5m`ʎ? ͼ$HQr\.G`r+G~Vm~ڕ AkA"-)ܰ'*)<1?~/{K} h/ቚ SnC`ZkZhWռ2ķ븴`:+A^U?,z:Um#&z<-8nC.ovnk&1y;}G*GX5) J聁Nρ2j%c9[?8q>x_þ&.],nI•QsI4dGdt}:spd(w-G#?< 3޵Grc #m'.bPM(@sֽ[k7V srCs,qI+ r:;v2hteBƒf]exz,[dԒOV _".[𜜑RU<85%"JII[ Yr=@U|SşK;(;7F#"ө]O{{q{t.%i8]f?5Wi=*֭w%u}""=3,kRX;j̧P "C_yRRydN~q޲mmFIIl$dXՍ(Hr=so°Sht4cj .xJ-7P=(J"SP%̃ F*IJ{fXBؒx' lĿj_7?#]}3&$?sG?#v1s 7sI[KmOP⥊xqM,j-Hɥh7Gc5|$fu 7!?JwcU Lo '@tņc6{Kr(TsKǥ[Α\쳀&F} qG2+GZm8`A)dg+_.伒쥧G[}^/O1Hvsqmm8ONpF/ ȟppk:r}l?^A xVpz8|=M}_C<þGc0C]@<ܹ24pַ"񷌌MrqIiИFr}:j~3Qin%޴-wR(m@rHAsƏiK9Y.|<υ[xjv%Anc\*F=GV2S{:,[c0{z)f.h9F>D9vTi/~&7$-Rj: #A8Dn??}ۑ{-8a`x:4:ռrf =HsIa@ەRfrjgtKRϽCjDc,H8榉b0jH`G楖Yc:/4 -z.&ލ@t=gZÑAi }?6]*K;+9ʹ9zN^^xr]IkpJA9PI׍1˖ڝzL\rQ+rzdU4)m.i9vVfnp?QJ:E!AXӀR"SAqR^7pҢ= !Zጒ("9$@sZ'ydGA=sqTLBU6~_}My!t*5Y15gR^ܻ2Y*OyOI=H @֋cSHtn{8U3 'b?Jv7{*ѝs6h9"jk$=p _+aO뭻]qԣ֪6| I*4hykXOq:<)?0տV-ѷAjԌ/F`ǀd8ZY:Mf;ׂѨMМM Яj:ʯHJҡ`N{r1OPԥij6v4y_$+EE<՛WX$' 0)bo:^3+Þ3ٕDк_6}eu B%1h& %PkƎ{uC):ݿyQB$#~d?BJk&=sYqM)2,IsFhvJSq%ð?!L&ǘ9K2( qn7֎!2Jn\g<}|? Z,q?eQ*rKb흎؝n#]һʳniy;R|{9:_ 9#|nLMs}*if!pF>f溟߉M[˚G5־n-/#óNz.|U^P!3Ź[<֠5i;H}ybxI_Z*CXH:7.xӱ)+8_S5ei-ndSpdG:O0H3k۴;;ҵmlQc[&Q獻=>I[_GoNCT‰Y?d?O4š_VN}"ᔸ`NW0zF4L2<'tF~ hѲM2[;tnm뽹UuނPB5" `fوSWfTvrd5嫞'&iCuZ{4Lxid[.G6 G1ں91ZŻ=m/61o{C5+Ů-cOaMzvkFKXFgfoѶV 3MqJ t0Z.ogiǪZɏEb8Ȧߣ?D18+ECW?* LNITom~o(ܒ_W~x+#_g&#R+wd[rrn=."[@?WBΣ#5o(^30Ma7}iğQ@ZwƁgF iagַu_2%Ǧy1jJEpzy="|;qs' R'KmIQa >k4JV`}Xڃ‘`%989k-9xtlGsGQ%2lI9 4ţacxm"8B8 AW tV77K"$vGB.wwoXͽͫEqWXܫ ώ0CZ"YȌz3)8'N}$ƼoOʒX[-{xB8{oϊ4Ak~Cg%ؐp7 0#N(dN \;TQVajY/w8^V9C,t3!1 &NX(P 9-Ӯ}kۊI6v؆wt˽+1swbP ^'OȸeNlpy+B~78+_R IbsOuyZ̓c}i?Λ7>c)9H3U(O#5Vҭ#=?ͱ*U{tqje.&*áPTyJ$5}H%NӬl8j@ߛ}Y";o 3kY$e{y6!aysLm}cf+8YzH=:9p^dIgm<gLv|W;OuI/ciu+B`n|09tjGk١?J๹&Xk|%= *?£_[\h%?TyAǪk- }x8d%ouo(JW/?޿"-B -R'Rl}0H?RW$omz<~*O: X0쎤~Oh^ŒYl2ǧ?ۍ?E,PDaSVbK DTu*?p)ynBG(I??%׺!&Fo^0 /XMotc?SG&ɒkvo.9;]F@C v哮_N+]=ƁbȲHceO&:c[;_}sVs,6g#?͌T2y)DOH_ML7&?J;r|kl [jIo"@yF 9 !qjXIud s ]) x$õFTV fߛޠdDRg5+ӢǘpoE]S@靳N}i2Įvu,35jG,0ڕccj@U?.A=}.V]0RH\o;eZMCsw.Uߡ'X{aN}=P7WM -$=GMΊ6mۤU'O UX;8rT{~mzصgr4zl#r%݁##v#$x⋵kEGUy`Cr9Y:k([џ)l>l{D!"1#Y3u$o>a.0 g#W]>>E2,oyfۑZgKӮnmaD;{n89k'G]dly.X楡IƬO6WHA ʜNqˏ1rI<ڄgAEGݞ8*[%UqP=1W\:}t͂o(N7LBxoר@k1zz0 hirOn c#rzU)J0W r_J@֕7Q%=4Rw0Dۢ#ʬ.ySyC1UzP) MU;yi[gAJ*4v!UGROAJV܂-ō¤{U1,p';$rm[a"!M>QBYsty?k`U*A`I$ٴ1K/M6q uv#ZvGPU6wZ2g sG^fIͬ͝""^p HkJt7ljq/Ԥ<9ط=V~kNeT ?!X2[Qa Nj_ ՘g f[당ye ^_$֒c'h pvRÂ?>+35x`SuJ4XL`Ʊ6Ҕ;RH㊍sJcZReҙMD=QUE>uQZ-94C3L9<իUPpz3ҙq\ۅF 3c{c> +e/H;~/!Qdp?yõjeż?+'aYV#2Z)%:4F>cW[UES2#Źr3k}If-X\"":}?AZO)a|9 IRtG~c,x!qk""}Yy56[+YiXcsFiZj k ꈌSqY4)2N#ɡQo 5q2`^W7InV,Z5U$ =NMMY" t(#_ҦaԮ5Py.0!zWӿJM\_HvaS9֕_տ0pq~/_qb`/dGLU]rGAf~C'ar \L^erh̅aQG4 wO!rfC@fqy1E1 l޷[{i-fGu* X$nzT=yfM*r15Ʊ}wdeXQn=/P^28*}+ͻAѝʢ4=J3 z-YTO ^%εk}E[2H?똴=4.͹!R@A=9cu%ωgEĖѺ!‚=92qZ'IKt$!pP_E>98O>7~_ߛ4]@Ikoou&t Ts2_3YդsaS+Metፁb7y݇ͷ=3^i}*O(3pzn`q]wSƜ=iZo6h>iXyx q{We~%\U엛ʲRֹ+c4'6}:fϥzE ~kt0rTⲼA,{haۿ>ƴGqgL=nOT 4rk|9!~c*r'5$T Db+zF_J0/&2jJ+j1-Ӛ[N}y19"AV1R@3zUJ纷YPv.yf3x9=m:*GrU忮T?RڔF-rg^qҭZCieIY65-?vs?k>tݝ)r='cұ|Bv<$.3-?Z[[)V"bOjm\g Pƾd@Zf__V54M&SHl#1Fx* $H/a9V e9s;w퍋n )D$Wگzjey$Hc#;Wd a霏M~$K[͔ !#;ns3w{}*'k}jdU˹ bs’=χx Ě|"~kL.eANeebȠ/s4Y%ĩhC#.㌋UU5ռ6*VڃX~.`w?ƺ.X.4q""hn)ydLt5`Uʷ<:ɤ\!o9)hݟʮX0TW8u~w fCEr`d^8 3L[-ZRk%h[sn[8s &Tbc|ohiF$f$e5%ݧkóɂ޺iZ:}y{9ᵳ7JִuZ=8c~==84|k9b.x^7`~^ Zk5Zpξ@f(khSRW^^{[ ;fi ɼN 7sTяoge> ׆{.nni5P륙d~>rW xj k7$Y~ɼp `u Ĵ/;X# h!ڴLEG0SktfɃ,߆?߅.wIqD/@*Oz‚Feq#ҧo{K\{7_Ȑg!p0@ q>gI* c'~1j1C[FZsrjӾT(+[A , AQ9^uкyUi:sz7? &yRݽ~ž'{i]8h FN~_[9mB7XFKT]ңzc%jmF >jpG\{nvFK5_-ik ȱG#*̧rޙZZu 4Ȍ 69 C@Fjz{,q_#eݴe@;YYFs8xoOZ:jR5Ӵ_xIfԮ g ?w@M[ҵ+SK51')W Zޱ&BU$112s'%yk^W] 2vV1492€N ֊]j?iY]wNglt]PE쬂k{K%ZLیⲼuhܫSmkXCi*>l5|9Ԛojt'I_"K7`s4~,ZmĒh}ַSqPSW=ƟcGg%Q[B7° SUlJsNկ pzQcD#c{5մ;o;+0@Tp9J-t%û)9<~{j7$O{/".r+{;kvl=:uϝbMGU&wzb3XSչAqQAg OwFӜGH7pnSj5hdfI "`;cp>Z! `+\6v_2hU}E\_D?HB~JZLP:iE N9COz(4PEwb^֖bUbrMҀ4.uk떍H*>1jjPMq9qz{ـ>^L-B?)B[k; pS v xto~,I/v[ oeI#v]w瞕2x,Wݱ:?qEqsBY~GRZ]Kln3gC)n/BR~_t6څ֖~ǫC۸%aGF [ZCCn> f J?7wVo?/G#!ou1${t^wSt[yj$nA#.IaW!*@GRW׫|vזfeb#LH߯֟q Өܙ9OS[\MeF7FVScHNfHXeOF԰_\BUw$}QRG%di!/Tn_n?҆\Z_ Mݦ]_!%f׽S޶8GaKVЉ,|HF#>F?v{frqm#9K =G)~~9^FccG}|&*Zƿ/m).Ahn+w44 fi2D"w(v=sz@3"Q1zy;7f_Zzz-2 F9$`ۥ]} 8;S2c9h驥ĢaOCp3qZWgc +1Itl,f{(u&/dM5ԨWHq!GvU49-stm\s;W2;NI֜zS)Yw1?2)\,})pь=6Alv4 ;$^x+$}vp2p)NOݍ:)?+Ƭ" P@`1j##(.!`6 22?޺}N#Zŝ-ݴ~v?h%}?o0?^;YVH?ʚmUL{7@D^\2A4jJo# =7˸P9mk]%eJKy"{V͞lY|dz/F8-nO:zK*V,\ڹ B:iFiH ҅Ic׿ҁwCy46fvSXr$*AA;z{Tb Km/j;J .84qPP)i)٣`#N 6HZuۅZe'30*1J@⊛OfE~#i#P&+hZE;bSu8$|G|;I%*kw[w2郄̸e'R.勗Ȗ37miF_?ʛ}OEO[N:R/`<))zPf8*{D =@=jcAמ,gSfXEHKm|OZ|IpE2?&E?imԖ;[1YKڹbHܓVJ6a^HKlܣ<+2)s=zD `c&Ӽfq؎\Khv\\L㝛}9LLΝ%ٵI=}ʹ[T/IlTӥJF#~UzR(8ݟƁ+ Oo|YzSrYz谬m`>r=֥E(BgzJJ;1XURuf1J U#b:< Nõ5u59V{h,YfNWG@x$SHX,<92;Mۛ,O\%]K M/*6 .?w#)U.M.`|y{EdTS%ċA5|G>'k-<] 2sM[)qIjl{Vܡd~GhNڋؽxzyȳڱH?`zXE$gڔ] LG 8ծ"= TBmhjxo{N?J6[ܕ> +CAMܲ(zQ}zp ZNPJ 6}!攞h\;$㧵v.)Pzњ@]łB 󪐍*/h8'ڷᴎvy-eG?~2Scgl`Y+4ǟ,dzjU.'򤍢a#q(%k)=ZrȆ쇧>ns=O@iXbI=M73 c94sSKKIUSldY=MHv*ľ0VʼGzG^=g,YYI=FGEXXu]$xP$hRj71^Aβ-?Tد#Y cB8?p3i芿(Ҕ)Wb?҅l@`v9qɤ*5jK@Ѻʸ>Vv#<(0}k\~wt 6MYnR扌:qH(AP)hI޽~I@*B6xǢFC)JApE[P8d @;b= ?ЩEH<iq}G.KV܂XednԎ?: qns$G~]o;\ϽMg$Gц,ӸQC)*Tb)(9^FڰA~cW"&5RUnc-(Q5Z$ 2Tq7QHc\¢㤓ȆI;'}SKw" miz(2@82=eb[AҩKH_6(3z *5Z61lylOҚnjSsF#e=:( 'LDa=3Eu?2kF;{UIhVP hOgj~US=ZY$`G9e@K)u~^H܂)*8cHXu5 #3!\~TcR -t.i/ňRHcϩ#ڧn*azz԰. 9I#NRݖ Uu2|:UWm4(ŋ: m8EVaG&(QK@ Ez0 J,R$ح$ٸnyHӑ>F_ATbݐahrdtS2܏Q0PK[oF TBIV#")Edzc#Q7T }P?#C]Qq}c cb_~bHuL>F1nf ,q~y1۞?CfUoןs{y9]C\\ H6TTpƨ9;\1a+I,9=5lwahvq47O̹$ugݷ<Ŷ¨ܱy8~WYc?( 8t$~t=)#hFK~D9pC/>+@tTD)#q'4Ry u4jkymv3",T݁+(A֛3 >_Cʾf܆*߷ZͲ[iʗ)LA4"ޟ1OSoY~e'\'ҖF80J?u?TVqyn0*Ͻ ;][Hy1WHrXSbqH4\̡6OPsK6=Ң+u%<T{~D2qb8F[#TJ̮h-CHijɩq¼rOZڬPo=Ԭ欴G#03F?ΙS+p:o5l`Qފ(9SRq4P%v@ ̧r|?EE)4K&C2) /pNj: @SpF(Rbn}\9SّTVc+)BPW$JQA%,9{Ӆ9QKc8z+EsIyO{|*7MU}$fbsԜ 0RQAoJ{d1O3hڃ$qǽK<QyUbG$(<(?*kOJdaS&TQt.\`I8m Xe ac MC ܑhJXBStreamer/build/classes/com/superhac/JXBStreamer/Gui/images/splash.gif0000700000175000017500000002620610540073072026371 0ustar sjscottsjscottGIF89a9`  %#/ ,!!!#7".!!!)))%&%%4&111655-,.N)#D2Q=@<5F5*K*=c 0h1d-B?LDY5KqGm1HJGVVSKONZc^KoHcZcvvvhght{U1BB1!1OD!U$T!Z*N,j)gjtsk!k't!s!t!k)bYNsw$i'!7*,9ÿج΅Cݼj)`~JH@uJ;dmX\W$?P\ .4:vtzر<)JΝiAJ+(PBZJUףIѩYN>7+ѷX^Ūժc*:jNA8KX5ǐ#Kvܸ}Z pA .l)Yͥ0p*Z.t@4\dG.wm3T??tYm~F*0e./p^dhtr|A9- `3@)q h-,*C{ؼ;ǿ{>؏_>"Y< %SASv1)qm'W6hz DMP8>NXh} X$d4!uY .vhG5~ݧ>:LS\l&  }g7v)ȑC=%P2C5fJӚԦ)Msϝ::ilChBRਬC@ DB )-MGni@ ԛ 3}kMW Uwk] & BPx{"@@H X?JLժ+D 8$ҟgi[ԻUzl*ڶ&-rմŀ y&< <̇%C5 pZy(+N gί` * Ԟ:la{j'0Ans[ Wͯ *` J+`@% & wP޶ ݅(H Vi˱2 ^յ1`;_7 N[/Uw?1j`@`~Є#dpV*Ƃ- ge`|QPBg.̏L0|ų XM'JK$ _b+0E({/^&>Dfg?l"Tp w_ y KG>?Rg8#p`ݗ,B3)oM3҃Nˀtsn֯(c$4Vw  ptL||N}10`G}X47@Ey5qLTTuWDTz%JA"K$b~`:G]R4Yy'JN7 C}Du|NP&9`=yiL aNPd%8~dn,?T'%JkXflalwJesc|R}OHbd[BuTN8V[4m/-x R]r !s:8F'IJZ0FDP^H((+HDX[]w\Lƕc}[6e~ ]3 pVp.7OI>P 0F*Y)19FP-)"Ʌ]yEub7t7btL 4]H qw'o{KBC > 0- ^@Ty -@Xs"9=u%2@h7vg'cjje؂I; G WwuBw8Д MxXixDȑ87%pb9؉gfl`HdT~(2"pNqs(`U0w7{ׇKBp% !01P_pؙ1`pԷ)XF4 )=[W_Hblhco9[BmBEp*QU6(9xGBy ډ>EpXiYg TlihF_>EH%dI3(g4 `MƏlfDy$4 Д- >>@%@'cɅu0jfdcGv+" = AʗQ/]?J::p!Y1^X]ZCdze*9B^Wbh\wDPy7@j2UP?CdZ)xfqc &pi6:e%7nqa0諴8@fIpB;)  T: "<$0 I=\y"}lc8)(+6UįW>[ffB  0FJ5PV :&XJ,t2 _h莦vp*F17">kHZEIA:FVdz!;uB`쪈l>[g{g)@!qr{ ЛjUw|XKసA%@5U!K)ZZ *s 3  >KS0 *Vx')˨밿KY۸c Tt;tV TРQqQ s<׬ 뾀;;[w/Z+8ylEt3MU +x[j۷; Z+z^UF0+u_~&v2[jJsò@rS0F׋|E{;I Zf*AЅǞq!hV˜tkciH5Tzfl Mkn,هAGldZX f(XV‡tiwh<~Aɟ's| 2L?a4j+G\e"*Yl3l{Wrğl Qd\G>ǃKʾ ĉ zl)jz &P`T ( 'x[Oܦ\!g5 : ""pkY̎:WK5@]ii`T`ʌNȲP6^>Ev\NA!m#; my? ~|6y&XyWyXxʖh(Կ7]y%x]PJ5<[P]y+Cc([f `L$hܨ#QEw :觠!<WlZm~<&Y HҾ=Wx-;t+`hWC;MÐ ~>e]J\h:ުxn _@qs'N~v@o3Z^W`fCޅ7U`[ 쨎]^(ˊLdȎr%L& 2ra0n*?.ƞueyE`-Z%I-iEhu+-QD/ .`,GZjƯ+k&?i+^?Mb?u6V) ԫq/ , @xyKo\!¾)"tzlDw: '@KfOM`+෯\p(D 4>m=W2uxu55ED59ɨՅEC0U s2blqqQQ`mp} `0/?O_oN.PҢ" =)j0JT$&02T-)rd .1nz †CY3 <+LvM[6oݾ;j9} 5ԩS XP 5Hbp#TB'L"YnԠTr׮0e Xdv E9z :v 2B` ?=J?}wB؊\FDK/e\1l1dgprY6z9]ɥMG?>}; *=+{+jRYGfpAJ"X 1&pN|(e|NIIӔRbQ=!.` $ЀB hIaTnƑ 4e|J2C/+M7Ug]F߅GNRÔj&:*# _68E<)XPBE[4\xPK. 6XL\j 'l}fwCUeSmʪhdv vހ';ڇ\ŀr [JJ.d)MMtOHjG˙Kn {+p 8wh~W4*zE.K4eJ/0WX0…vzݧ?- APޅ^IL)&'clyu)G"|v M 3Q%݂$ {.bɘ¼69ԛ]dooSP0Ͻ]D}C pS)a 1`酊i}eL. D 8 CkN|wgtXB+CEn40-L[/imk{7fjڋ 9[̼v%m BםEz%$`4@-d9rIvzl'LQTi{\ҁ&598Bǃ W Lap;d1Ba0@ń~Q1h{&(X}^#R>,FU=# *^@)5DԘ;>%0LɝUĤ9y lZ$==8 {0PNᅱCx:re4  4$MX`atv$5)F"Jfhg"|P4!@pptR5PqM2`ۣH|"sNԄ&vȑT&xViP RȨ$M h [0{>^%u:o=|03 Hh˛ ŘP<_dD5'kS—˦U5:E8 g $yCg mHU ]Xz @@'Ƀ$( eHL@CMq\(SkU  .8A fpU}\+q5pPJ9B1ƃJ*%ɩNBxn˓#(ۘ+h?A`PW$ BՈa=x* xpQovv`ոiፎp 7E U C\<, x |!'9I l ɃIEABV'4R'@Q YEL7WEhRlQog gY#"^qek{x`&"@g'G0A?7C Jh؈%xo HuQr_wAys9Mp5t`d@CW0@"``V`\s^WR*}zsgswYIl%8'yOd |n&,I8'CTڙM' 1j"@kJhh!}"XI{6WE3q)*1ť|٥q8=vE+eP&M5TR)"p'ZP(""Pp# gzgȃ,ݗqVuJ!?wr %ЩɞPu|D.br FFG;?N vz  4 p `A~*ͪ&"hHH 7Glydk\}\p!P" )d3KM*" cA [! ` 䊥аge`2|OZx?h 78@8@zrYk5، REPP`7Mp`AK0Z!@4ݐдn"QKi5=PY U b[@0j+ |nwpv{p;F!Ziڥ&,O[^:& a;_VYXtz'cCP%P0J麬+&e{I;#uI?*@4&¾.y6Q;Cp5sʫ8 I\ v¡H@yHH^?V{f]8.d u&7ЉFнJ%e̮=G'Tp TPA Fr7V£iC3Tt<T'r`%yEY("oVp}I^ڝ#']P p&L!yP>^5`PpW8(ǹwX{ YiW$*G7C. zQyD[oIGi =GzF"0p&_# YKOpQ{KG   !(mE-n":>7~.^/8N䛸C~C}P~6.R>=.M8x94MBJ]c8dXHQn5~.~Ⴞs|uyQ.m]`<#.>g㌾A>N^^楮fnZ꺾굮揾蠞n^IMq~xNv~>N饎^~.%Np">⎗Ne^nnoO>wۮN$@ܮn!'о*Oj_2//(8#4/n5/%H=_ήF5dI+/O>1SY$rZ8˔Ro?}5piN On`A`WA~XN9Or2GCҼq[UJ?U%bj]&]t{3'H[ϩłyVOPHgRt46zOXOC]Xi'OG~ԂN+o U6K=LYRRwN-8jp~~﹄EIZTT@8^>g9}~ڋl} HI x=ԉs36RhQ,~;PZkJ[ܹj/2?үo +Z̧Q3xXZ{} ?>` ?]t|d}dNkK\&IqAd(}S_9"8$ӓc8slA"btJ"KݣnyN)S"\r/]].:9sӡONDRUjQ&| \djA=¹ZTZA +reYLmݦ8G8iһmTзT o8}t/!wSlc_WOb;G&YWT' ޚjK•˒MXNn2!# UN5)tKgIjmrueWH{^7R z`q@y@@RqPtKv}kh,y=ۉ (ɮVyu*ϟJI$\*ဃ=h~RgWaތr=)SێmS z*@F)2)8s\M8.L[isg=k# KOwErkDk"JIlֲkHIe E)oN[ϼ v-+*AHޡI"NZj'PNN|@݌%F[V8v'>BI‡>scdq+S&Zݒ5WfnaƅU"d`.$=VP)Pħmf)OKa'f޻㊐\Mpm#zEC1W!'*ϕU\N9#KM-I>ɫ ER{Vz ⭯:Ap%4%?i=MgnEw$GK*u me'8  vhTp.s]T> 6Km#)ܔ-+\-譁犞k4kKW5wDF}T}b>tt5= &CGW+ϥ%(HJ%j8<3A<*\pk/!s{ GVCY#yz Olۯ-ZҦ?TR =)^֔Aї)K9S!J򔯎||qMuuSQZh-*mJDYp(FO:ǯK! K$b ũM +?e Tk+Kj TtOA^]}cx@gs #̊C,Xm\6llMFi 6qmo%ܬG73:5 }ZI3UdqmrqH㼦KhDGa-n s@셛zox>S_7a>3p+A} κ&܌EzRӿwރ-)`z2*R㭰` Q>y9W*`[kM7-q*s<}NJ*{TM'\m*Qg)ᷭWOӶX[I6b!eRy(tvIybU KPq8Νŭ8Q23mzyr\I<n:ǧŠH:j̘Jn(P`*w8ߛ. :h) rH%p~jC+86spiSPVW[/.\F# JmTN|>U6 'toh{QZ]DCUI1㥽"yR5鹪c,|Qeazp`~8K:NOonyԫӟMd:D?]FBot GI:X6QyVC~ $ZBx4cP۞Tvf'dn${wqߛ$-ָ0Қu.'`>45kf%"C*{>_KũtrJW#±w-tA?:qG*>Ud"$2 i޽x⣱rT)I[IG>5\--($:Vp<*1w NP?JWPMdeŸ" \[X#ϻ빺FssmZ,k*>G94O%ٛji%\}`VmsʛAꡐcL@BN$d $S>4-lLf559ܹn DJBۓ=ܮ/' SY]幈Q$)C=g:V=FPN@Nz(椱r82"qNEBZee*O+T\dD[k Jq2O?C7t\dXWJjDy+r%IϞ 04#IRou M5&B'cNpfmܡ!H-<9v>:f2kaY3^Xb!+w @4gnJ>L3YDs4QvFOx@r9nQ~aEHVy%Cz rժ_[v_J"iW yT]=Vwz|SY0 Bgʒ Ը-D(!(>\S6S1zwyJХp*nIYG}: Se*;+:zehޕ$=^oLtĵ-H[O@VpGr}Jzm6 Ox>&pb ϡ-Nq3c4]> N<=Z(C>r3ޠ+SdάDW` 62qN,uB yW%(>ƾCP#ұ""l;O=JN+(]D{\m$?:4or5B!}F qݺ܅٣2r_"~ʕU`QrvV+`ɩOX cj<P%9vw]cYJO'_QڞJ"Tq T}qr얞5m(Rz28u6;[1EGJKSjˮruϪ4G_tެXQou$H RҴoQji;'SJڅIv?iR.ȮkK 6*}t]w{*UqTI2'/"|!J'=W J\Wj*N *U&B1]wt*:9H{Ӟ*>Bv$giJL`}Д>T+3_?*TPJXBStreamer/build/classes/com/superhac/JXBStreamer/Core/ServerStatus.class0000700000175000017500000000177110540073070027006 0ustar sjscottsjscott1$     !"isServerRunningZclientsLjava/util/ArrayList; SignatureLLjava/util/ArrayList;(ZLjava/util/ArrayList;)VCodeLineNumberTableLocalVariableTablethis,Lcom/superhac/JXBStreamer/Core/ServerStatus;LocalVariableTypeTableP(ZLjava/util/ArrayList;)V getClients()Ljava/util/ArrayList;N()Ljava/util/ArrayList;()Z SourceFileServerStatus.java #java/util/ArrayList  *com/superhac/JXBStreamer/Core/ServerStatusjava/lang/Object()V!   z**Y**,      /*&  /*/ JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/ConnectedClientStatus.class0000700000175000017500000000344010540073070030574 0ustar sjscottsjscott1G 1 2 3 4 5 6 789:;<=>?@ABCDEsourceIPLjava/lang/String; clientVersionlastClientCommandIopenFileHandlersopenDirectoryHandlerstransferedBytesSecJ+(Ljava/lang/String;Ljava/lang/String;IIIJ)VCodeLineNumberTableLocalVariableTablethis5Lcom/superhac/JXBStreamer/Core/ConnectedClientStatus;getClientVersion()Ljava/lang/String;getLastClientCommandgetOpenDirectoryHandlers()IgetOpenFileHandlers getSourceIPgetTransferedBytesSec()J SourceFileConnectedClientStatus.java F      '"Unknown Command3com/superhac/JXBStreamer/Core/ConnectedClientStatusjava/lang/Object()V! !&**+*,****""! "#$%&%'#H&$%&&&&&&&'!/*"/# $%('!l*e DeJMPSVYe\_bG     "6 9H;K>NAQDTGWJZM]P`ScVfYi\# l$%)*!/*"l# $%+*!/*"y# $%,'!/*"# $%-.!/*"# $%/0JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/XBMSPServerMessageHandler.class0000700000175000017500000003006210540073072031214 0ustar sjscottsjscott1                      ! !  !  ! !  !! !" # $ !% &' f( !) * f+ f,-. f/ 01 2 !3 o4 !5 !6 !7 o89 : ;< != >?@  AB C DEFG HIJKLM VN VO P QR QS VT U VV VW VXYZ[ \ ]^ f_ f`ab fc d fefg oh o`ij oeklmnopqr st uv >w xy  z { o|}~ currentPathLjava/io/File;directoryHandlersLjava/util/ArrayList; SignatureMLjava/util/ArrayList; fileHandlersHLjava/util/ArrayList; virtualRoot%Ljava/util/ArrayList; atVirtualRootZsc!Ljava/nio/channels/SocketChannel;directoryNextHandlerCountIfileNextHandlerCount newConnection clientVersionLjava/lang/String;lastClientCommandloggerLjava/util/logging/Logger;lastTransmissionTimeJ9(Ljava/nio/channels/SocketChannel;Ljava/util/ArrayList;)VCodeLineNumberTableLocalVariableTablethis9Lcom/superhac/JXBStreamer/Core/XBMSPServerMessageHandler;LocalVariableTypeTableI(Ljava/nio/channels/SocketChannel;Ljava/util/ArrayList;)VIncommingMessage(Ljava/nio/ByteBuffer;)Vversion[Bipacket3Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;messageLjava/nio/ByteBuffer;getSocketChannel#()Ljava/nio/channels/SocketChannel; handleMessage6(Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;)Vstrings[Ljava/lang/String;indexfilehandle2error2handle handleObject6Lcom/superhac/JXBStreamer/Core/DirectoryHandlerObject;dhodho2fho1Lcom/superhac/JXBStreamer/Core/FileHandlerObject;fho2bufeLjava/io/IOException;decodedMessageresponseerror changeDir(Ljava/lang/String;)Zparentrooti$Ljava/util/Iterator;currentPathTemppathnewPathchildren newDirectorymatched upDirectory(I)ZcountgetDirectoryHandle()I dirHandlermatch getFileHandle(Ljava/io/File;)I fileHandlergetCWDDirectoryHandler8()Lcom/superhac/JXBStreamer/Core/DirectoryHandlerObject;9(I)Lcom/superhac/JXBStreamer/Core/DirectoryHandlerObject;getFileHandler4(I)Lcom/superhac/JXBStreamer/Core/FileHandlerObject; closeHandlecloseAllHandles()Z getStatus7()Lcom/superhac/JXBStreamer/Core/ConnectedClientStatus;getFileTransferRates()JfileTransferRategetLastTransmissionDelaydelay SourceFileXBMSPServerMessageHandler.java java/util/ArrayList Not Set     1Message is empty... Probably disconnected client.   java/lang/String java/lang/StringBuilder...Move up .. ran java/io/File          /ERROR: Client requested directory change to : <%Client requested directory change up  levels.  4com/superhac/JXBStreamer/Core/DirectoryHandlerObject  :Directory handler already created.. Returning the handler.0Directoy handler does not exist.. Creating one..   Get File handler for </com/superhac/JXBStreamer/Core/FileHandlerObject "File handler exist.. returning it.6File handler does not exist.. Creating one. Handler #:Geting CWD handler...@ERROR: Can't find working directory handler. Should not happen!$Client directory read for handle #: Client file read for handle #:  filename: is invalid!Client request handle #:  to be closed. +Client requested all handles to be closed.. 3com/superhac/JXBStreamer/Core/ConnectedClientStatus    7com/superhac/JXBStreamer/Core/XBMSPServerMessageHandlerjava/lang/Object()V#com/superhac/JXBStreamer/Core/Debug getLogger()Ljava/util/logging/Logger;java/nio/ByteBuffer remainingdebugjava/util/logging/Loggerinfo(Ljava/lang/String;)Vjava/lang/SystemcurrentTimeMillisget()B([BII)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString()Ljava/lang/String; hasRemaining decodepacketgetType(I)Ljava/lang/StringBuilder;encodePacketOk5()Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;getPayloadStringencodePacketErrorH(BLjava/lang/String;)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder; getPayloadIntencodePacketHandle6(I)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder; getNextEntry()[Ljava/lang/String;encodePacketFileDataY(Ljava/lang/String;Ljava/lang/String;)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;getFileIndexNumber(Ljava/lang/String;)IgetEntryDataByIndex(I)[Ljava/lang/String;getFileByIndex(I)Ljava/io/File;getPayloadInt2read(I)Ljava/nio/ByteBuffer;encodePacketFileContentsJ(Ljava/nio/ByteBuffer;)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;getPayloadInt64getPayloadByteseekFile(JB)Z getPacket()Ljava/nio/ByteBuffer;java/nio/channels/SocketChannelwrite(Ljava/nio/ByteBuffer;)IoutLjava/io/PrintStream;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;java/io/PrintStreamprintln startsWith(Ljava/lang/String;I)Z getParentiterator()Ljava/util/Iterator;java/util/IteratorhasNextnext()Ljava/lang/Object;getAbsolutePath compareTogetNamelist isDirectorysize(I)Ljava/lang/Object;getPath()Ljava/io/File; getHandle(ILjava/util/ArrayList;)Vadd(Ljava/lang/Object;)Z(ILjava/io/File;)V getFileNameremove removeAll(Ljava/util/Collection;)Zsocket()Ljava/net/Socket;java/net/SocketgetRemoteSocketAddress()Ljava/net/SocketAddress;+(Ljava/lang/String;Ljava/lang/String;IIIJ)VgetFileTransferRate!  Q**Y*Y***'* * * * *+*,:T &/$5+;0>6A;V@WEXJ[P] QQQ QK+ ** c+M>>,,+T,3  *Y,d Y* * + !Y"M,+#*,$^hi jlpr$t+u-v5x<yDzGvM}]c4+Y-W /*  {M>Y%+&'*+& +& FNgn+(M*+)*>++,M+(M*+-.>++,My+(Mq*/6+0Ma*+-1:+2,MG3:+224M0*5:8+)667:+224M +8,M+9,M*5::+)66+2,M:: * ;6 + 0M+<,M*+-=:++>?@Mx+2,Mm*+-=:  + +A+BC6  +(M + D,M6+2,M+*+-E +(M+2,M *FW+(M,K G,H: *IW:KYLMN2[^JBP &.x} &36>AILRWbhs|    $&')!-$0)1.7298:@=FDNE[I^G`HzJ & '|  b) hT'R` F`{{yw|=>+ O>+PQ3!YR+S** +TQ!YR+S*KUNVY* WX:*Y:ZC[V:VYWX:\\]** * *N*Y:Z8[V:^+]*VY\X *>ħ* _:6{2+]iY* MP+:VYX`>*VYX *!YR+S> =!Ya+S7TUXZ[]^_$b*cHfMgRhTi^kdlnosuwyz|}~*:?ADGJS^j #1JU&?JVS!Yb'c=* *>u*VY* WX:*Y:ZC[V:VYWX:\\]** * ^$&*,16;=DKM]|R#|1fJ]S?w& <=*I>*d9*efg"*efh<= i§d>*dW*efg@*efg^* ^]"*efh<= ik j*.fY**kN-h<*-lW*Y`+fY** mN-h<*-lW*Y`! )8:@HNQ^o !"$ &).H AS_ m=>$Yn+^S6*dB*eop+^]#*eoq=> rMYs*'oY*+t:q=*lW*Y`N;<> ?+B:CSDcEeFkGsByL}MNQSUX\>.K) u*/W*6<*d&*efg*efէQ<*dD*efg-*efg^* ^]*ef vFghmoq't8uDqJyM{Z~k{ .OLRYw'=*d'*efh*ef,>JP !/RR=*d\*eoqD2Yx'y*eop*eo!Yx'z&  %T`fl d!Y{'|=*d&*eoq*}W=*d&*efh*}W6 $1CLNTas|~*&.V.b( ~**W**W& (Y /Y** * *d*d* /+ @*YN-Z-[o:a@) * +)G*em@   JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/XBMSPxmlEncoder.class0000700000175000017500000000512710540073072027247 0ustar sjscottsjscott1 1H IJ KL 0MN OPQR H ST IUV WXYZ[\]^_`a Ib cdef Ighijklm &nop &qr stu v wx sy Kz{|loggerLjava/util/logging/Logger;()VCodeLineNumberTableLocalVariableTablethis/Lcom/superhac/JXBStreamer/Core/XBMSPxmlEncoder; encodeEntry"(Ljava/io/File;)Ljava/lang/String;e&Ljava/io/UnsupportedEncodingException;entryLjava/io/File;dataLjava/lang/String;convert[B SourceFileXBMSPxmlEncoder.java 45} ~ 23!Encoding directory entry in XML.. java/lang/StringBuilder    directoryEncoding a file entry in XML..  file  java/lang/StringUS-ASCII 4$java/io/UnsupportedEncodingException ERROR:  -com/superhac/JXBStreamer/Core/XBMSPxmlEncoderjava/lang/Object java/io/File isDirectory()Z#com/superhac/JXBStreamer/Core/DebugdebugZjava/util/logging/Loggerinfo(Ljava/lang/String;)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;getName()Ljava/lang/String;toStringlength()J(J)Ljava/lang/StringBuilder; lastModifiedgetBytes()[B([BLjava/lang/String;)Vjava/lang/SystemoutLjava/io/PrintStream;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;java/io/PrintStreamprintlnexit(I)V getLogger()Ljava/util/logging/Logger;!01 23456/*78 9: ;<6 L*s LY +  *  LY +  LY +  LY +  L` LY +  *  LY +  LY +  *  LY +  LY +  LY +  * LY +  LY +  * LY +  *! LY + " *# LY + $ LY +  LY +  L+%M&Y,'(L!N*Y + -,-.+)7!"% &')*:/N0b1v3y5689:;=>?&@:BZCzDFGHKNROPQT8*=> ?@AB.CDE56#/7 FGJXBStreamer/build/classes/com/superhac/JXBStreamer/Core/XBMSPDiscoverServer.class0000700000175000017500000000741210540073070030111 0ustar sjscottsjscott1 4i 3j 3k 3l mn 3o 4p 3q 4rs 3t u vwx yz{ |} ~    3       0 portIserverIPLjava/lang/String;socketLjava/net/DatagramSocket;runningZ stopThread(I)VCodeLineNumberTableLocalVariableTablethis3Lcom/superhac/JXBStreamer/Core/XBMSPDiscoverServer;threadLjava/lang/Thread;run()Ve Ljava/lang/InterruptedException; startServer stopServer initServerpacketLjava/net/DatagramPacket;Ljava/net/SocketException;Ljava/io/IOException;process(Ljava/net/DatagramPacket;)ViLjava/net/UnknownHostException;bufferLjava/nio/ByteBuffer;sizetypeB messageIDclientVersionSizestring[BlengthOfServerVersionlengthOfServerIP lengthOfPort serverCommenttypeSize messageSizedatasetPort SourceFileXBMSPDiscoverServer.java >H 56 ;< =< 78 H MH java/lang/InterruptedException 9: H Server started... java/net/DatagramPacket >java/net/DatagramSocket >java/net/InetSocketAddress >? S RSjava/net/SocketExceptionjava/io/IOException +XBMSP-1.0 1.0 JXBStreamer Media Server 1.0  > Sjava/net/UnknownHostException H1com/superhac/JXBStreamer/Core/XBMSPDiscoverServerjava/lang/Thread.com/superhac/JXBStreamer/Core/InternalIPFindergetLocalIPAddress()Ljava/lang/String;startsleep(J)Vclosejava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)V([BI)V(Ljava/net/SocketAddress;)Vbindreceivejava/nio/ByteBufferallocate(I)Ljava/nio/ByteBuffer;getData()[Bput([B)Ljava/nio/ByteBuffer;flip()Ljava/nio/Buffer;getInt()Iget()Bclearjava/lang/StringlengthvalueOf(I)Ljava/lang/String;putInt(B)Ljava/nio/ByteBuffer;getBytes remaining getAddress()Ljava/net/InetAddress;getPort([BILjava/net/InetAddress;I)VsendprintStackTrace!3456789:;<=<>?@(**x*****M,A& ) !+-!/#0'2B (CD(56#EFGH@x *** L A"5679=:>?BIJ CDKH@? **AFG IB  CDLH@? ** APR TB  CD=H@H*** A\] ^_B CDMH@eYL*Y * Y*** +*+L* L**MPMYABijk$m6o=qEsJtMPwQzVY|Z_dB*5NOQIPZIQeCDRS@!ܸM,+W, W,!>,"6,!6,!6:6,"T,#W$%6*%6 *&%6 6 6  ` ` `` ``6 , 'W,[(W,'W, 'W,*)W, 'W,*&)W,'W,$)W, 'W, W,*:,+W* Y+,+-./:1 :2 0 A' &,2<EKPW`lor  B5T6IUIQ!CD!NOVWX6 YZ&[6,\62]^W_6``6 la6 ob6 rc6 d6 7e^f?@>*A BCD56ghJXBStreamer/build/classes/com/superhac/JXBStreamer/Core/CheckForClientTimeoutsTask.class0000700000175000017500000000350210540073072031530 0ustar sjscottsjscott1_ 1 2 34 5 367 1 8 9: 9;< = > ? @ A B CDEFG maximumDelayIcaller+Lcom/superhac/JXBStreamer/Core/XBMSPServer;.(Lcom/superhac/JXBStreamer/Core/XBMSPServer;)VCodeLineNumberTableLocalVariableTablethis:Lcom/superhac/JXBStreamer/Core/CheckForClientTimeoutsTask;run()Vclient9Lcom/superhac/JXBStreamer/Core/XBMSPServerMessageHandler;i$Ljava/util/Iterator;eLjava/io/IOException;iclientsLjava/util/ArrayList;removeLocalVariableTypeTablePLjava/util/ArrayList; SourceFileXBMSPServer.java " H IJ  KLjava/util/ArrayList MNO PQ RS7com/superhac/JXBStreamer/Core/XBMSPServerMessageHandler TU VW XJ YZ ,W [\] ^"java/io/IOException8com/superhac/JXBStreamer/Core/CheckForClientTimeoutsTaskjava/util/TimerTask)com/superhac/JXBStreamer/Core/XBMSPServergetMaximumClientIdleTime()IgetServerMessageHandlers()Ljava/util/ArrayList;iterator()Ljava/util/Iterator;java/util/IteratorhasNext()Znext()Ljava/lang/Object;getLastTransmissionDelay()Jadd(Ljava/lang/Object;)Zsizeget(I)Ljava/lang/Object;getSocketChannel#()Ljava/nio/channels/SocketChannel;java/nio/channels/SocketChannelclose R**+*+  !"P*LYM+N- &-  : * , W>,9*Y:+,Wç :, :űP]``e`hvy:)7AKPZhvy{H)#$,%&{'(C>) z*+r,+-z*.r,./0JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/DirectoryHandlerObject.class0000700000175000017500000000741010540073070030721 0ustar sjscottsjscott1 )_` _ (a (b (c (d ef (g (h (i (j (k l m n o (p eqr _s t u v wx yz{| }~   handleIpathLjava/io/File;filesLjava/util/ArrayList; Signature%Ljava/util/ArrayList; virtualRoottotalDirectoryEntriesdirectoryListingPositionloggerLjava/util/logging/Logger; isVirtualRootZ(ILjava/io/File;)VCodeLineNumberTableLocalVariableTablethis6Lcom/superhac/JXBStreamer/Core/DirectoryHandlerObject;(ILjava/util/ArrayList;)VLocalVariableTypeTable)(ILjava/util/ArrayList;)VbuildDirectoryList()Vichildren[Ljava/io/File;buildVirtualRootList getHandle()I getNextEntry()[Ljava/lang/String;payloadStrings[Ljava/lang/String;entrygetFileIndexNumber(Ljava/lang/String;)InameLjava/lang/String;getEntryDataByIndex(I)[Ljava/lang/String;indexpayloadsgetFileByIndex(I)Ljava/io/File;filegetPath()Ljava/io/File; SourceFileDirectoryHandlerObject.java 9Djava/util/ArrayList ./ 2/ 4+ 78 56 *+ ,- CD HD J 3+ 8java/lang/StringBuilder%Build directory list. Total Entries:  java/lang/String#Last directory entry. Reset List..6Reading and packing next directory entry at position:  java/io/File  1Getting file index number in directory for file <? Q#Getting entry data(xml) by index...Get file by index....4com/superhac/JXBStreamer/Core/DirectoryHandlerObjectjava/lang/Object#com/superhac/JXBStreamer/Core/Debug getLogger()Ljava/util/logging/Logger; removeAll(Ljava/util/Collection;)Z listFiles()[Ljava/io/File;add(Ljava/lang/Object;)Zsizedebugappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString()Ljava/lang/String;java/util/logging/Loggerinfo(Ljava/lang/String;)Vclone()Ljava/lang/Object;get(I)Ljava/lang/Object;getName-com/superhac/JXBStreamer/Core/XBMSPxmlEncoder encodeEntry"(Ljava/io/File;)Ljava/lang/String; compareTo!()*+,-./012/013+4+ 5678 9:;3**Y*** * *, * <* 8"(.:$<)=.?2A= 3>?3*+3,-9@;=**Y*** * *,* ** <2 K"(.L$M)N.O3P8R<S= =>?=*+=2/A =210BCD;[**W* L=+*+2W** Y*<& [ ^cd'c-g8i>jZm= E+[>?GFGHD;\&**W****<t y{%= &>?IJ;/* <= >?KL; L**2+S+S** * *  + Y*** M+,!S+,"S*Y`+<J$+/5=?Eapw~= >?MNpO-PQ;P! Y#+$=* * !+%<$1FHN= &(E+P>?PRSTU;7 &M,* !S,* "S,<$5= 7>?7V+$WNXY;f '* M,<= >?V+Z-[\;/* <= >?]^JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/XBMSPServer.class0000700000175000017500000001711310540073072026413 0ustar sjscottsjscott1 h g g g g g  g g g g    g   g  g  '   4 F F g :    F  4   : h  F   F  : 4     X X X X   : a! " # g" g$%&portI virtualRootLjava/util/ArrayList; Signature%Ljava/util/ArrayList;autoDiscoveryEnabledZ startServer stopServer serverRunningselectorLjava/nio/channels/Selector;discoveryServer3Lcom/superhac/JXBStreamer/Core/XBMSPDiscoverServer;smhListPLjava/util/ArrayList;loggerLjava/util/logging/Logger;timerLjava/util/Timer;maximumClientIdleTime()VCodeLineNumberTableLocalVariableTablethis+Lcom/superhac/JXBStreamer/Core/XBMSPServer;runnableLjava/lang/Runnable;threadLjava/lang/Thread;rune Ljava/lang/InterruptedException;serverListeningLoopsocketLjava/net/Socket;sc!Ljava/nio/channels/SocketChannel;smh9Lcom/superhac/JXBStreamer/Core/XBMSPServerMessageHandler;versionLjava/lang/String;bufLjava/nio/ByteBuffer; numBytesReadirsk Ljava/nio/channels/SelectionKey;skeysLjava/util/Set;itLjava/util/Iterator;ssc'Ljava/nio/channels/ServerSocketChannel;ssLjava/net/ServerSocket;keybufferLjava/io/IOException;getServerStatus.()Lcom/superhac/JXBStreamer/Core/ServerStatus;i$clientsLocalVariableTypeTableLLjava/util/ArrayList;isServerRunning()ZgetPort()IsetPort(I)VisAutoDiscoveryEnabledsetAutoDiscoveryEnabled(Z)VsetVirtualRoot(Ljava/util/ArrayList;)V((Ljava/util/ArrayList;)VgetServerMessageHandlers()Ljava/util/ArrayList;R()Ljava/util/ArrayList;getMaximumClientIdleTimesetMaximumClientIdleTime SourceFileXBMSPServer.java jk pq rq sq tqjava/util/ArrayList ym k' () {|1com/superhac/JXBStreamer/Core/XBMSPDiscoverServer wxjava/lang/Thread * +java/util/Timer }~8com/superhac/JXBStreamer/Core/CheckForClientTimeoutsTask , -. r /0java/lang/InterruptedException 12 34 uv5 36 78 9java/net/InetSocketAddress: ;< =>? @A BqWaiting for packet...C DE F GHI JKL M NOjava/nio/channels/SelectionKey P QRS TU7com/superhac/JXBStreamer/Core/XBMSPServerMessageHandler lm V WX+XBMSP-1.0 1.0 JXBStreamer Media Server 1.0 US-ASCIIY Z[ \] ^_New connection created.. ` abjava/nio/channels/SocketChannel c de fU gX hi j_Client Disconnected `e k li mn u4 opjava/io/IOExceptionq rsjava/lang/StringBuilderERROR: tu tv wxy zE {|*com/superhac/JXBStreamer/Core/ServerStatus } s ~4)com/superhac/JXBStreamer/Core/XBMSPServerjava/lang/Objectjava/lang/Runnable#com/superhac/JXBStreamer/Core/Debug getLogger()Ljava/util/logging/Logger;(Ljava/lang/Runnable;)Vstart.(Lcom/superhac/JXBStreamer/Core/XBMSPServer;)VscheduleAtFixedRate(Ljava/util/TimerTask;JJ)Vsleep(J)VprintStackTracejava/nio/channels/Selectoropen()Ljava/nio/channels/Selector;%java/nio/channels/ServerSocketChannel)()Ljava/nio/channels/ServerSocketChannel;configureBlocking((Z)Ljava/nio/channels/SelectableChannel;()Ljava/net/ServerSocket;java/net/ServerSocketbind(Ljava/net/SocketAddress;)Vregister?(Ljava/nio/channels/Selector;I)Ljava/nio/channels/SelectionKey;java/nio/ByteBufferallocate(I)Ljava/nio/ByteBuffer;debugjava/util/logging/Loggerinfo(Ljava/lang/String;)Vselect selectedKeys()Ljava/util/Set; java/util/Setiterator()Ljava/util/Iterator;java/util/IteratorhasNextnext()Ljava/lang/Object;readyOpsaccept()Ljava/net/Socket;java/net/Socket getChannel#()Ljava/nio/channels/SocketChannel;9(Ljava/nio/channels/SocketChannel;Ljava/util/ArrayList;)Vadd(Ljava/lang/Object;)Zjava/lang/StringgetBytes(Ljava/lang/String;)[Bwrap([B)Ljava/nio/ByteBuffer;write(Ljava/nio/ByteBuffer;)Iremovechannel'()Ljava/nio/channels/SelectableChannel;sizeget(I)Ljava/lang/Object;getSocketChannelequalsclear()Ljava/nio/Buffer;readcloseflipIncommingMessage(Ljava/nio/ByteBuffer;)V removeAll(Ljava/util/Collection;)Zjava/lang/SystemoutLjava/io/PrintStream;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;java/io/PrintStreamprintln getStatus7()Lcom/superhac/JXBStreamer/Core/ConnectedClientStatus;(ZLjava/util/ArrayList;)Vwakeup!ghi jklmnopqrqsqtquvwxymnz {|}~kt**x*****Y * * Y**LY+M,*Y*Y* BS% .147@*L1V7YF\H]Q^Ub`csg tH,Q#*** **L+!" & opqrvz"w#y'{#* *"#$L+%W+&M,'Y*()+*#*N+:**v, -.*#/W*#0:1:2A34:5~~,6:7:  8W *#9W:Y *;<: *Y: *  =W ç :   >:  ?@A:   BW, C.D5~EF:D6  * G*  H:IJbKWL6  6, M.*Y: *  NW ç :   OPW*  H:Q {-RS+T*Y:* * UWç :***LWXYYZ[+\]^tV@ %08=DJRZclv &5LR[agot~ rk J )  [Pk )k /cQlH 08<YL* _M,2,3:N+-`=WaY*+b#/*# <4m 4/* sV* *c**#dW*+./1 r4* 89 /*A {'**e***f*& LM NPSTU!V&W''jk/*a >* lmpqP*+; y{lm lon/*  n/*  >*  kJXBStreamer/build/classes/com/superhac/JXBStreamer/Core/Debug.class0000700000175000017500000000112310540073070025351 0ustar sjscottsjscott1   debugZ()VCodeLineNumberTableLocalVariableTablethis%Lcom/superhac/JXBStreamer/Core/Debug; getLogger()Ljava/util/logging/Logger; SourceFile Debug.java com.superhac.JXBStreamer.Core  #com/superhac/JXBStreamer/Core/Debugjava/lang/Objectjava/util/logging/Logger.(Ljava/lang/String;)Ljava/util/logging/Logger;!   /*        JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/.emptyDir0000700000175000017500000000023610540073072025100 0ustar sjscottsjscottThis file was generated by Together to prevent this folder from being deleted during synchronization with the CVS repositiory. Please do not delete this file.JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/FileHandlerObject.class0000700000175000017500000000742310540073070027640 0ustar sjscottsjscott1 1e 0f 0g 0h ij 0klm n 0o p 0q r 0st iuv ew x y z {| i}~  0        handleIfileLjava/io/File; maxPositionJcurrentFilePositionfileTransferBytes startTimefstreamLjava/io/RandomAccessFile;loggerLjava/util/logging/Logger;(ILjava/io/File;)VCodeLineNumberTableLocalVariableTableeLjava/io/FileNotFoundException;Ljava/io/IOException;this1Lcom/superhac/JXBStreamer/Core/FileHandlerObject;read(I)Ljava/nio/ByteBuffer;data[B bytesReadbufLjava/nio/ByteBuffer; numberOfBytesseekFile(JB)ZoffsetseekTypeBerrorZ newOffset getFileName()Ljava/lang/String;getFile()Ljava/io/File; getHandle()IgetFileTransferRate()Jduration bytesPerSec SourceFileFileHandlerObject.java ? 97 23 45 ` :7java/io/RandomAccessFiler ? ;< ` 87 ` 67java/io/FileNotFoundException java/lang/StringBuilder&Should not have happend(FIleHandler): Z java/io/IOException => W/Reading and packing file data. Read bytes req:  Current POS:  Max Pos:  I J*End of File... Sending null. Current POS: J +Should not have happend(FIleHandler read): Seeking file data: offset:  SeekType: +Should not have happend(FIleHandler seek):  Z/com/superhac/JXBStreamer/Core/FileHandlerObjectjava/lang/Object()Vjava/lang/SystemcurrentTimeMillis#(Ljava/io/File;Ljava/lang/String;)VgetFilePointerlengthoutLjava/io/PrintStream;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;toStringjava/io/PrintStreamprintln(Ljava/lang/String;)Vexit(I)V#com/superhac/JXBStreamer/Core/Debug getLogger()Ljava/util/logging/Logger;debug(I)Ljava/lang/StringBuilder;(J)Ljava/lang/StringBuilder;java/util/logging/Loggerinfo([B)Ijava/nio/ByteBufferallocateputIntput([BII)Ljava/nio/ByteBuffer;seek(J)V java/io/FilegetName!012345678797:7;< =>?@A-** **,**Y, ** ** BNY-!NY->A>bBJ4) 67:>(?3@>HABBC[D_HbEcF|GJKC4BDEcDFGH2345IJAsDz4Y* !* "M* ,#>N $:3+Y%* !* "** *Ya&W,'MY(,7BFVW7];^D_LbQdWehjklmqrtxC>;lKLDcM3L[NODFGHP3QRA=Y) ** !* "6 :e** +|6v*e7 ** +Q6K* a7** +-6'* e7 * + 66#:Y,CB!@Cdmux{~C>DFGHS7TUCVWX7YZA2*-BC GH[\A/*BC GH]^A/*BC GH_`Au'*e.m@ B*  *mB!B %C 'GH a7b7cdJXBStreamer/build/classes/com/superhac/JXBStreamer/Core/InternalIPFinder.class0000700000175000017500000000263210540073070027466 0ustar sjscottsjscott1M )* + , -. -/0 12 3 45 678 9:;<()VCodeLineNumberTableLocalVariableTablethis0Lcom/superhac/JXBStreamer/Core/InternalIPFinder;getLocalIPAddress()Ljava/lang/String;localIPLjava/lang/String;getSiteLocalIPaddrLjava/net/InetAddress;nifLjava/net/NetworkInterface; addressesLjava/util/Enumeration; interfaceseLjava/lang/Exception; SourceFileInternalIPFinder.java   =>? @A BCjava/net/NetworkInterface D>java/net/InetAddress EA Fjava/lang/ExceptionG HI"Problems getting local ip address!J KL.com/superhac/JXBStreamer/Core/InternalIPFinderjava/lang/ObjectgetNetworkInterfaces()Ljava/util/Enumeration;java/util/EnumerationhasMoreElements()Z nextElement()Ljava/lang/Object;getInetAddressesisSiteLocalAddressgetHostAddressjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)V!3*   ; KK* "$  WKL+:+M,N-- :  KާçL **GJ B*-0127(83;;=AKDLGSJOKQSRUU>3* !%"#@$#K %&T'(JXBStreamer/build/classes/com/superhac/JXBStreamer/Core/XBMSPEncoderDecoder.class0000700000175000017500000002257410540073070030017 0ustar sjscottsjscott1f P A A  A A A A A         A A  A A  A A A A A A A A ! 5"# $%& ' () $* + ,-. A A/ A0 A1 A23 54 55 6 A789 5:;<SERVER_VERSIONLjava/lang/String; ConstantValue=XBMSP_PACKET_NULLB XBMSP_PACKET_SETCWD XBMSP_PACKET_FILELIST_OPEN XBMSP_PACKET_FILELIST_READ XBMSP_PACKET_FILE_INFOXBMSP_PACKET_FILE_OPENXBMSP_PACKET_FILE_READXBMSP_PACKET_FILE_SEEKXBMSP_PACKET_CLOSEXBMSP_PACKET_CLOSE_ALL%XBMSP_PACKET_SET_CONFIGURATION_OPTION XBMSP_PACKET_AUTHENTICATION_INITXBMSP_PACKET_AUTHENTICATEXBMSP_PACKET_UPCWDXBMSP_PACKET_OKXBMSP_PACKET_ERRORXBMSP_PACKET_HANDLEXBMSP_PACKET_FILE_DATAXBMSP_PACKET_FILE_CONTENTS$XBMSP_PACKET_AUTHENTICATION_CONTINUE#XBMSP_PACKET_SERVER_DISCOVERY_QUERYZ#XBMSP_PACKET_SERVER_DISCOVERY_REPLY[XBMSP_ERROR_OKXBMSP_ERROR_FAILUREXBMSP_ERROR_UNSUPPORTEDXBMSP_ERROR_NO_SUCH_FILEXBMSP_ERROR_INVALID_FILEXBMSP_ERROR_INVALID_HANDLEXBMSP_ERROR_OPEN_FAILEDXBMSP_ERROR_TOO_MANY_OPEN_FILESXBMSP_ERROR_TOO_LONG_READXBMSP_ERROR_ILLEGAL_SEEK XBMSP_ERROR_OPTION_IS_READ_ONLY XBMSP_ERROR_INVALID_OPTION_VALUE!XBMSP_ERROR_AUTHENTICATION_NEEDED!XBMSP_ERROR_AUTHENTICATION_FAILEDXBMSP_FILE_SEEK_TYPE_FWDFROMBEGXBMSP_FILE_SEEK_TYPE_BCKFROMENDXBMSP_FILE_SEEK_TYPE_FWDFROMCURXBMSP_FILE_SEEK_TYPE_BCKFROMCURmsgLenItypeidpayloadLjava/nio/ByteBuffer;packet payloadStringpayloadString2 payloadInt payloadInt2 payloadInt64J payloadByte payloadData[B headerSizeloggerLjava/util/logging/Logger;()VCodeLineNumberTableLocalVariableTablethis3Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder; getPacket()Ljava/nio/ByteBuffer;getId()IsetId(I)V setMsgLengetType()BsetType(B)V decodepacket(Ljava/nio/ByteBuffer;)VbuffdecodePayloadString()Ljava/lang/String;ie&Ljava/io/UnsupportedEncodingException; stringSizedirdecodePayloadIntdecodePayloadBytedecodePayloadInt64()JdecodePayloadData()[BsizeencodePacketOk5()Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;outgoingPacketencodePacketErrorH(BLjava/lang/String;)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder; stringLength errorCode errorMessageencodePacketHandle6(I)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;handleencodePacketFileDataY(Ljava/lang/String;Ljava/lang/String;)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder;bytesnamedataencodePacketFileContentsJ(Ljava/nio/ByteBuffer;)Lcom/superhac/JXBStreamer/Core/XBMSPEncoderDecoder; setPayloadgetPayloadBytegetPayloadData getPayloadIntgetPayloadInt2getPayloadInt64getPayloadStringgetPayloadString2 SourceFileXBMSPEncoderDecoder.java > ?@ AB!Packing packet for transmission..C DE F GH I JK LK V MN MOjava/lang/StringBuilder&Decoding packet.. Socket Buffer size: PQ PR S T U9Decoding packet.. Socket Buffer size after XBMSP header: VW R   V ' R" &Packet not identifed... Hacker? lmfao!java/lang/StringUS-ASCII X$java/io/UnsupportedEncodingExceptionY Z[ERROR: P\] ^E _ ` aEncoded Packet Okay response.1com/superhac/JXBStreamer/Core/XBMSPEncoderDecoder $Encoded Packet Error response. Code: b cd Me Encoded Packet Handle response.'Encoded File data response. (XML Data). cEncoded File Contents.java/lang/Object+XBMSP-1.0 1.0 JXBStreamer Media Server 1.0 #com/superhac/JXBStreamer/Core/Debug getLogger()Ljava/util/logging/Logger;debugZjava/util/logging/Loggerinfo(Ljava/lang/String;)Vjava/nio/ByteBufferflip()Ljava/nio/Buffer; remainingallocate(I)Ljava/nio/ByteBuffer;putIntput(B)Ljava/nio/ByteBuffer;,(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toStringgetIntget hasRemaining()Z([BLjava/lang/String;)Vjava/lang/SystemoutLjava/io/PrintStream;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;java/io/PrintStreamprintlnexitgetLonglimitlengthgetBytes(Ljava/lang/String;)[B([B)Ljava/nio/ByteBuffer;!AP7QRSTUVSWXVSYZVS[\VS]^VS_`VSabVScdVSefVSghVSijVSklVSmnVSopVSqrVSstVSuvVSwxVSyzVS{|VS}~VSVSVSVSsVSuVSwVSyVS{VS}VSVSVSVSWVSYVS[VS]VSVSsVSuVSwVRRV F**   ** W*** ` ** ** ` * * W* *W* *W** *W* W* >-08EQ]ip| /* >* >*  /* >*   V^"Y+ *+ *+*+* *Y+ ** +*+W* W*~ C~u ~#D]\ **3  **!" #**!" $** %**ϲ &**!"**!' (**!"**)***+, -**!"l .****/K 0**2 1**!"**23 4C" *!2":$E&F)L*h/s1z2358:;<=?@AB DEF G#I)J1K9L<NBOJPRQUS[TcUkVsWvY|Z[\]^`abcefghiklmnpqrstwx!~""T*<M>,*T5Y,67N9Y:-;<=)3482  #)45NR45TLB2* 2* 2*> +* L*?=>+*T+ #)*+ !y- @AYBL+*C+D+*EF+#+-:YGAYBN :-D-*EFW,@,H6W,6IJW#:9Y:;<=-K-Uad8F'/4<CG M UadfHfM7VR'e/]6 LAYBMd N,D,*EF-W,-K,& &')+/!2)5/84:*66 | MAYBNи :-D-*EF+:,6+HW+N:JW,HW,N:JWWW-K-JKLMPT#W+Y3\=]C^KaUb[ccdfgmhtlzn>C#||R|Rf^A OAYBM,D,*EF+ ,+K N-W,-K,2 }~#',/4:?*4 AA+>*+ /** /*3 /*" /*' /*, /* /*/ JXBStreamer/src/com/0000700000175000017500000000000010540072762014506 5ustar sjscottsjscottJXBStreamer/src/com/com/0000700000175000017500000000000010540072762015264 5ustar sjscottsjscottJXBStreamer/src/com/com/superhac/0000700000175000017500000000000010540072762017076 5ustar sjscottsjscottJXBStreamer/src/com/com/superhac/JXBStreamer/0000700000175000017500000000000010540072762021224 5ustar sjscottsjscottJXBStreamer/src/com/com/superhac/JXBStreamer/Gui/0000700000175000017500000000000010540072762021750 5ustar sjscottsjscottJXBStreamer/src/com/com/superhac/JXBStreamer/Core/0000700000175000017500000000000010540072762022114 5ustar sjscottsjscottJXBStreamer/src/com/com/superhac/JXBStreamer/Gui/SaveAndLoadSettings.java0000700000175000017500000000253410540072762026464 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; public class SaveAndLoadSettings implements Serializable { final static long serialVersionUID = 453334534L; public int portNumber = 1400; public boolean enableAutoDiscovery = true; public ArrayList shares = new ArrayList(); public void saveSettings() { try { //Serialize to a file ObjectOutput out = new ObjectOutputStream(new FileOutputStream("jxb.cfg")); out.writeObject(this); out.close(); } catch (IOException e) { //System.out.println("Cannot save!: " + e); } } public SaveAndLoadSettings loadSettings() { try { // Deserialize from a file File file = new File("jxb.cfg"); ObjectInputStream in = new ObjectInputStream(new FileInputStream( file)); // Deserialize the object SaveAndLoadSettings newSettings = (SaveAndLoadSettings) in .readObject(); in.close(); return newSettings; } catch (ClassNotFoundException e) { //System.out.println("Cannot load!: " + e); } catch (IOException e) { //System.out.println("Cannot load!: " + e); } return null; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/StatusPanel.java0000700000175000017500000000714110540072762025064 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import com.superhac.JXBStreamer.Core.XBMSPServer; public class StatusPanel { private JPanel jPanel = null; // @jve:decl-index=0:visual-constraint="274,69" private JScrollPane jScrollPane = null; private JTable jTable = null; ConnectionStatusTabMod model; //private XBMSPServer server; private JPanel jPanel1 = null; private JLabel jLabel = null; public StatusPanel(XBMSPServer server) { //this.server = server; model = new ConnectionStatusTabMod(server); } /** * This method initializes jPanel * * @return javax.swing.JPanel */ public JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setBackground(java.awt.Color.black); jPanel.setLayout(new BorderLayout()); jPanel.setVisible(false); jPanel.add(getJScrollPane(), java.awt.BorderLayout.CENTER); jPanel.add(getJPanel1(), java.awt.BorderLayout.NORTH); jTable.setModel(model); } return jPanel; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setPreferredSize(new java.awt.Dimension(800,600)); jScrollPane.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_NEVER); jScrollPane.setBackground(java.awt.Color.black); jScrollPane.setForeground(new java.awt.Color(116,181,33)); // this is another color hack to get the scroll pane thats not filled by jtable to be black jScrollPane.getViewport().setBackground(Color.black); jScrollPane.setViewportView(getJTable()); } return jScrollPane; } /** * This method initializes jTable * * @return javax.swing.JTable */ private JTable getJTable() { if (jTable == null) { jTable = new JTable(); jTable.setBackground(java.awt.Color.black); jTable.setForeground(new java.awt.Color(116,181,33)); // the table header colors need to be set! it doesnt use the default renderer jTable.getTableHeader().setBackground(java.awt.Color.black); jTable.getTableHeader().setForeground(new java.awt.Color(116, 181, 33)); jTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { final static long serialVersionUID = 453499534L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { // the background must be red... setBackground(Color.black); // ...and the text itself must be yellow setForeground(new java.awt.Color(116, 181, 33)); // perform the default actions to the cell. return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); } }); } return jTable; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { jLabel = new JLabel(); jLabel.setText("Connection Monitor"); jLabel.setForeground(new java.awt.Color(116, 181, 33)); jLabel.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 18)); jLabel.setBackground(new java.awt.Color(238, 238, 238)); jPanel1 = new JPanel(); jPanel1.setBackground(java.awt.Color.black); jPanel1.add(jLabel, null); } return jPanel1; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/ShareTableModel.java0000700000175000017500000000241210540072762025610 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.io.File; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; public class ShareTableModel extends AbstractTableModel { final static long serialVersionUID = 488534534L; public String[] colNames = {"Share's"}; ArrayList shares; /** Creates a new instance of IncommingConnTableModel */ public ShareTableModel(ArrayList shares) { super(); this.shares = shares; } public String getColumnName(int col) { return colNames[col].toString(); } public int getRowCount() { return shares.size(); } public int getColumnCount() { return colNames.length; } public Object getValueAt(int row, int col) { File file = (File) shares.get(row); switch (col) { case 0: return file.getAbsolutePath(); } return ""; } public boolean isCellEditable(int row, int col) { return false; } public void addSharePath(File file) { shares.add(file); this.fireTableDataChanged(); } public void removeSharePath(int index) { shares.remove(index); this.fireTableDataChanged(); } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/MainStatusBar.java0000700000175000017500000000514610540072762025341 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.Color; import java.awt.FlowLayout; import java.util.Timer; import java.util.TimerTask; import javax.swing.JPanel; import javax.swing.JTextField; import com.superhac.JXBStreamer.Core.XBMSPServer; import javax.swing.JLabel; public class MainStatusBar { private XBMSPServer server; private JPanel jPanel = null; // @jve:decl-index=0:visual-constraint="360,133" private JTextField serverStatusjTextField = null; private JLabel jLabel = null; public MainStatusBar(XBMSPServer server) { this.server = server; // update every second Timer timer = new Timer(); timer.scheduleAtFixedRate(new RemindTask(this), 1000, 1000); } /** * This method initializes jPanel * * @return javax.swing.JPanel */ public JPanel getJPanel() { if (jPanel == null) { jLabel = new JLabel(); jLabel.setText("Server Status:"); jLabel.setForeground(new java.awt.Color(116,181,33)); jLabel.setBackground(java.awt.Color.black); FlowLayout flowLayout = new FlowLayout(); flowLayout.setAlignment(java.awt.FlowLayout.LEFT); jPanel = new JPanel(); jPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED)); jPanel.setBackground(java.awt.Color.black); jPanel.setLayout(flowLayout); jPanel.add(jLabel, null); jPanel.add(getJTextField1(), null); } return jPanel; } public void update(){ if(server.isServerRunning()) { serverStatusjTextField.setForeground(new Color(0x05BF4B)); serverStatusjTextField.setText("Running.."); } else { serverStatusjTextField.setForeground(Color.RED); serverStatusjTextField.setText("Stopped"); } // when the text changes this makes the jTextField resize jPanel.revalidate(); } class RemindTask extends TimerTask { MainStatusBar caller; RemindTask(MainStatusBar caller) { this.caller = caller; } public void run() { caller.update(); } } /** * This method initializes jTextField1 * * @return javax.swing.JTextField */ private JTextField getJTextField1() { if (serverStatusjTextField == null) { serverStatusjTextField = new JTextField(); serverStatusjTextField.setEditable(false); serverStatusjTextField.setBorder(null); serverStatusjTextField.setToolTipText("Is the server running?"); serverStatusjTextField.setBackground(java.awt.Color.black); serverStatusjTextField.setForeground(new java.awt.Color(116,181,33)); serverStatusjTextField.setText("-----"); } return serverStatusjTextField; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/FileTreeModel.java0000700000175000017500000001067110540072762025303 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileFilter; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.EventListenerList; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** Example of a simple static TreeModel. It contains a (java.io.File) directory structure. (C) 2001 Christian Kaufhold (ch-kaufhold@gmx.de) */ public class FileTreeModel implements TreeModel, Serializable, Cloneable { final static long serialVersionUID = 45344434L; protected EventListenerList listeners; private static final Object LEAF = new Serializable() { final static long serialVersionUID = 4543322534L; }; private Map map; private File root; public FileTreeModel(File root) throws NullPointerException { this.root = root; if (!root.isDirectory()) { try{ map.put(root, LEAF); } // we need to do this for windows removal drives...A: // if the media is not there it will throw a null exception.. catch and set the table to NULL catch(NullPointerException e) { throw e; } } this.listeners = new EventListenerList(); this.map = new HashMap(); } public Object getRoot() { return root; } public boolean isLeaf(Object node) { return map.get(node) == LEAF; } public int getChildCount(Object node) { List children = children(node); if (children == null) return 0; return children.size(); } public Object getChild(Object parent, int index) { return children(parent).get(index); } public int getIndexOfChild(Object parent, Object child) { return children(parent).indexOf(child); } protected List children(Object node) { File f = (File)node; Object value = map.get(f); if (value == LEAF) return null; List children = (List)value; if (children == null) { File[] c = f.listFiles(new DirFilter()); if (c != null) { children = new ArrayList(c.length); for (int len = c.length, i = 0; i < len; i++) { children.add(c[i]); if (!c[i].isDirectory()) map.put(c[i], LEAF); } } else children = new ArrayList(0); map.put(f, children); } return children; } public void valueForPathChanged(TreePath path, Object value) { } public void addTreeModelListener(TreeModelListener l) { listeners.add(TreeModelListener.class, l); } public void removeTreeModelListener(TreeModelListener l) { listeners.remove(TreeModelListener.class, l); } public Object clone() { try { FileTreeModel clone = (FileTreeModel)super.clone(); clone.listeners = new EventListenerList(); clone.map = new HashMap(map); return clone; } catch (CloneNotSupportedException e) { throw new InternalError(); } } public static void main(String[] args) { //String path = System.getProperty( "user.home" ) + //File.separatorChar + "Desktop"; File root = new File("/"); if (!root.exists()) { System.err.println(root+ ": No such file or directory"); System.exit(2); } JTree tree = new JTree(new FileTreeModel(root)); JFrame f = new JFrame(root.toString()); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.getContentPane().add(new JScrollPane(tree)); f.pack(); f.setVisible(true); } } class DirFilter implements FileFilter { public boolean accept(java.io.File a) { return a.isDirectory(); } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/DebugWindow.java0000700000175000017500000000617510540072762025045 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.io.OutputStream; import java.util.logging.LogRecord; import java.util.logging.Logger; import java.util.logging.StreamHandler; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import com.superhac.JXBStreamer.Core.Debug; public class DebugWindow { private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="244,46" private JPanel jContentPane = null; private JTextArea jTextArea = null; private JScrollPane jScrollPane = null; private Logger logger; private WindowHandler st = new WindowHandler(); public DebugWindow() { Debug.debug = true; logger = Debug.getLogger(); // this stops the console logging! logger.setUseParentHandlers(false); } /** * This method initializes jFrame * * @return javax.swing.JFrame */ public JFrame getJFrame() { if (jFrame == null) { jFrame = new JFrame(); jFrame.setSize(new java.awt.Dimension(613,430)); jFrame.setTitle("Debug"); jFrame.setMinimumSize(new java.awt.Dimension(600,400)); jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); jFrame.setContentPane(getJContentPane()); jFrame.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { // window closed Debug.debug = false; logger.removeHandler(st); jFrame.dispose(); // unregister handle } }); } return jFrame; } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BoxLayout(getJContentPane(), BoxLayout.X_AXIS)); jContentPane.add(getJScrollPane(), null); } return jContentPane; } /** * This method initializes jTextArea * * @return javax.swing.JTextArea */ private JTextArea getJTextArea() { if (jTextArea == null) { jTextArea = new JTextArea(); jTextArea.setPreferredSize(new java.awt.Dimension(600,400)); // get the jtextarea from the handler! jTextArea = st.getJTextArea(); logger.addHandler(st); } return jTextArea; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setViewportView(getJTextArea()); } return jScrollPane; } class WindowHandler extends StreamHandler { //JTextArea output; final JTextArea output = new JTextArea(); public WindowHandler() { setOutputStream(new OutputStream() { public void write(int b) {} // not called public void write(byte[] b, int off, int len) { output.append(new String(b, off, len)); } }); } public JTextArea getJTextArea() { return output; } public void publish(LogRecord record) { super.publish(record); flush(); } } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/SplashScreen.java0000700000175000017500000000310410540072762025206 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Toolkit; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JWindow; public class SplashScreen { private JWindow jWindow = null; // @jve:decl-index=0:visual-constraint="187,60" private JPanel jContentPane = null; private JLabel jLabel = null; /** * This method initializes jWindow * * @return javax.swing.JWindow */ public JWindow getJWindow() { if (jWindow == null) { jWindow = new JWindow(); jWindow.setSize(new java.awt.Dimension(320,261)); jWindow.setContentPane(getJContentPane()); // custom Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int x = (int)(dim.getWidth() - jWindow.getWidth())/2; int y = (int)(dim.getHeight() - jWindow.getHeight())/2; jWindow.setLocation(x,y); jWindow.setAlwaysOnTop(true); } return jWindow; } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { GridLayout gridLayout = new GridLayout(); gridLayout.setRows(1); gridLayout.setColumns(1); jLabel = new JLabel(); jLabel.setIcon(new ImageIcon(getClass().getResource("/com/superhac/JXBStreamer/Gui/images/splash.gif"))); jLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jContentPane = new JPanel(); jContentPane.setLayout(gridLayout); jContentPane.add(jLabel, null); } return jContentPane; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/AboutWindow.java0000700000175000017500000001502010540072762025056 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.BorderLayout; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; public class AboutWindow { private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="210,39" private JPanel jContentPane = null; private JPanel jPanel = null; private JPanel jPanel1 = null; private JLabel jLabel = null; private JPanel jPanel2 = null; private JLabel jLabel1 = null; private JPanel jPanel3 = null; private JLabel jLabel2 = null; private JPanel jPanel4 = null; private JLabel jLabel3 = null; private JPanel jPanel5 = null; private JLabel jLabel4 = null; private JPanel jPanel6 = null; private JTextArea jTextArea = null; private JPanel jPanel7 = null; private JTextArea jTextArea1 = null; private JPanel jPanel8 = null; private JTextArea jTextArea2 = null; /** * This method initializes jFrame * * @return javax.swing.JFrame */ public JFrame getJFrame(JFrame parent) { if (jFrame == null) { jFrame = new JFrame(); jFrame.setResizable(false); jFrame.setTitle("JXBStreamer"); jFrame.setMinimumSize(new java.awt.Dimension(300,400)); jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jFrame.setSize(new java.awt.Dimension(309,267)); jFrame.setContentPane(getJContentPane()); jFrame.setLocationRelativeTo(parent); jFrame.pack(); } return jFrame; } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.setPreferredSize(new java.awt.Dimension(300,425)); jContentPane.add(getJPanel(), java.awt.BorderLayout.NORTH); } return jContentPane; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new BoxLayout(getJPanel(), BoxLayout.Y_AXIS)); jPanel.setPreferredSize(new java.awt.Dimension(290,416)); jPanel.add(getJPanel1(), null); jPanel.add(getJPanel2(), null); jPanel.add(getJPanel3(), null); jPanel.add(getJPanel4(), null); jPanel.add(getJPanel5(), null); jPanel.add(getJPanel6(), null); jPanel.add(getJPanel7(), null); jPanel.add(getJPanel8(), null); } return jPanel; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { jLabel = new JLabel(); jLabel.setText("JXBStreamer V 1.0"); jLabel.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 18)); jPanel1 = new JPanel(); jPanel1.add(jLabel, null); } return jPanel1; } /** * This method initializes jPanel2 * * @return javax.swing.JPanel */ private JPanel getJPanel2() { if (jPanel2 == null) { jLabel1 = new JLabel(); jLabel1.setText("By SuperHac"); jPanel2 = new JPanel(); jPanel2.add(jLabel1, null); } return jPanel2; } /** * This method initializes jPanel3 * * @return javax.swing.JPanel */ private JPanel getJPanel3() { if (jPanel3 == null) { jLabel2 = new JLabel(); jLabel2.setText("email: SuperHac007@gmail.com"); jPanel3 = new JPanel(); jPanel3.add(jLabel2, null); } return jPanel3; } /** * This method initializes jPanel4 * * @return javax.swing.JPanel */ private JPanel getJPanel4() { if (jPanel4 == null) { jLabel3 = new JLabel(); jLabel3.setText("web: http://www.SuperHac.com"); jPanel4 = new JPanel(); jPanel4.add(jLabel3, null); } return jPanel4; } /** * This method initializes jPanel5 * * @return javax.swing.JPanel */ private JPanel getJPanel5() { if (jPanel5 == null) { jLabel4 = new JLabel(); jLabel4.setText(""); jLabel4.setIcon(new ImageIcon(getClass().getResource("/com/superhac/JXBStreamer/Gui/images/about.jpg"))); jPanel5 = new JPanel(); jPanel5.add(jLabel4, null); } return jPanel5; } /** * This method initializes jPanel6 * * @return javax.swing.JPanel */ private JPanel getJPanel6() { if (jPanel6 == null) { jPanel6 = new JPanel(); jPanel6.add(getJTextArea(), null); } return jPanel6; } /** * This method initializes jTextArea * * @return javax.swing.JTextArea */ private JTextArea getJTextArea() { if (jTextArea == null) { jTextArea = new JTextArea(); jTextArea.setText("Special thanks to PuhPuh for the great documentation on XBMSP..."); jTextArea.setRows(2); jTextArea.setPreferredSize(new java.awt.Dimension(280,35)); jTextArea.setWrapStyleWord(true); jTextArea.setEditable(false); jTextArea.setBackground(new java.awt.Color(238,238,238)); jTextArea.setLineWrap(true); } return jTextArea; } /** * This method initializes jPanel7 * * @return javax.swing.JPanel */ private JPanel getJPanel7() { if (jPanel7 == null) { jPanel7 = new JPanel(); jPanel7.add(getJTextArea1(), null); } return jPanel7; } /** * This method initializes jTextArea1 * * @return javax.swing.JTextArea */ private JTextArea getJTextArea1() { if (jTextArea1 == null) { jTextArea1 = new JTextArea(); jTextArea1.setBackground(new java.awt.Color(238,238,238)); jTextArea1.setText("Greetings: ThongN, TimmyD, BigBrother,SeniorBrother, and JrBrother."); jTextArea1.setEditable(false); jTextArea1.setLineWrap(true); jTextArea1.setRows(2); jTextArea1.setWrapStyleWord(true); jTextArea1.setPreferredSize(new java.awt.Dimension(280,35)); } return jTextArea1; } /** * This method initializes jPanel8 * * @return javax.swing.JPanel */ private JPanel getJPanel8() { if (jPanel8 == null) { jPanel8 = new JPanel(); jPanel8.add(getJTextArea2(), null); } return jPanel8; } /** * This method initializes jTextArea2 * * @return javax.swing.JTextArea */ private JTextArea getJTextArea2() { if (jTextArea2 == null) { jTextArea2 = new JTextArea(); jTextArea2.setBackground(new java.awt.Color(238,238,238)); jTextArea2.setText("Copyright (C) 2006 by SuperHac, All Rights Reserved. Permission to use JXBStreamer for any purpose is hereby granted."); jTextArea2.setEditable(false); jTextArea2.setLineWrap(true); jTextArea2.setRows(2); jTextArea2.setWrapStyleWord(true); jTextArea2.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12)); jTextArea2.setPreferredSize(new java.awt.Dimension(280,50)); } return jTextArea2; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/SharePanel.java0000700000175000017500000002615010540072762024644 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridLayout; import java.io.File; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreePath; public class SharePanel { private JPanel jPanel = null; // @jve:decl-index=0:visual-constraint="63,40" private JPanel jPanel2 = null; private JPanel jPanel3 = null; private JPanel jPanel4 = null; private JScrollPane jScrollPane = null; private JTable jTable = null; private JPanel jPanel6 = null; private JButton jButton = null; private JPanel jPanel1 = null; private JLabel jLabel = null; ArrayList shares; private JPanel jPanel5 = null; private JScrollPane jScrollPane1 = null; private JTree jTree = null; private JPanel jPanel7 = null; private JButton jButton1 = null; private JComboBox jComboBox = null; public SharePanel(ArrayList shares) { this.shares = shares; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ public JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new BorderLayout()); jPanel.setBackground(java.awt.Color.black); jPanel.add(getJPanel1(), java.awt.BorderLayout.NORTH); jPanel.add(getJPanel2(), java.awt.BorderLayout.CENTER); } return jPanel; } /** * This method initializes jPanel2 * * @return javax.swing.JPanel */ private JPanel getJPanel2() { if (jPanel2 == null) { GridLayout gridLayout = new GridLayout(); gridLayout.setRows(1); gridLayout.setColumns(2); jPanel2 = new JPanel(); jPanel2.setBackground(java.awt.Color.black); jPanel2.setLayout(gridLayout); jPanel2.add(getJPanel3(), null); jPanel2.add(getJPanel4(), null); } return jPanel2; } /** * This method initializes jPanel3 * * @return javax.swing.JPanel */ private JPanel getJPanel3() { if (jPanel3 == null) { jPanel3 = new JPanel(); jPanel3.setLayout(new BorderLayout()); jPanel3.setBackground(java.awt.Color.black); jPanel3.setForeground(new java.awt.Color(116, 181, 33)); jPanel3.add(getJPanel5(), java.awt.BorderLayout.NORTH); jPanel3.add(getJScrollPane1(), java.awt.BorderLayout.CENTER); jPanel3.add(getJPanel7(), java.awt.BorderLayout.SOUTH); } return jPanel3; } /** * This method initializes jPanel4 * * @return javax.swing.JPanel */ private JPanel getJPanel4() { if (jPanel4 == null) { jPanel4 = new JPanel(); jPanel4.setLayout(new BorderLayout()); jPanel4.setBackground(java.awt.Color.black); jPanel4.setForeground(new java.awt.Color(116, 181, 33)); jPanel4.add(getJPanel6(), java.awt.BorderLayout.SOUTH); jPanel4.add(getJScrollPane(), java.awt.BorderLayout.CENTER); } return jPanel4; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setBackground(java.awt.Color.black); jScrollPane.setForeground(new java.awt.Color(116, 181, 33)); jScrollPane.setOpaque(true); // this is another color hack to get the scroll pane thats not filled by jtable to be black jScrollPane.getViewport().setBackground(Color.black); jScrollPane.setViewportView(getJTable()); } return jScrollPane; } /** * This method initializes jTable * * @return javax.swing.JTable */ private JTable getJTable() { if (jTable == null) { jTable = new JTable(new ShareTableModel(shares)); jTable.setBackground(java.awt.Color.black); jTable.setForeground(new java.awt.Color(116, 181, 33)); jTable.setOpaque(true); // the table header colors need to be set! it doesnt use the default renderer jTable.getTableHeader().setBackground(java.awt.Color.black); jTable.getTableHeader().setForeground(new java.awt.Color(116, 181, 33)); jTable.getTableHeader().setFont(new java.awt.Font("ae_Sindibad", java.awt.Font.BOLD, 14)); jTable.setFont(new java.awt.Font("ae_Sindibad", java.awt.Font.BOLD, 12)); jTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { final static long serialVersionUID = 4534534777L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { // the background must be red... setBackground(Color.black); // ...and the text itself must be yellow setForeground(new java.awt.Color(116, 181, 33)); // perform the default actions to the cell. return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); } }); } return jTable; } /** * This method initializes jPanel6 * * @return javax.swing.JPanel */ private JPanel getJPanel6() { if (jPanel6 == null) { FlowLayout flowLayout = new FlowLayout(); flowLayout.setAlignment(java.awt.FlowLayout.CENTER); jPanel6 = new JPanel(); jPanel6.setBackground(java.awt.Color.black); jPanel6.setForeground(new java.awt.Color(116, 181, 33)); jPanel6.setLayout(flowLayout); jPanel6.add(getJButton(), null); } return jPanel6; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setText("Remove"); jButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (jTable.getSelectedRow() != -1) { ((ShareTableModel) jTable.getModel()) .removeSharePath(jTable.getSelectedRow()); } } }); } return jButton; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { jLabel = new JLabel(); jLabel.setText("Share Manager"); jLabel.setForeground(new java.awt.Color(116, 181, 33)); jLabel.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 18)); jLabel.setBackground(new java.awt.Color(238, 238, 238)); jPanel1 = new JPanel(); jPanel1.setBackground(java.awt.Color.black); jPanel1.add(jLabel, null); } return jPanel1; } public void setShareList(ArrayList shares) { } /** * This method initializes jPanel5 * * @return javax.swing.JPanel */ private JPanel getJPanel5() { if (jPanel5 == null) { GridLayout gridLayout1 = new GridLayout(); gridLayout1.setRows(1); jPanel5 = new JPanel(); jPanel5.setBackground(java.awt.Color.black); jPanel5.setForeground(new java.awt.Color(116, 181, 33)); jPanel5.setLayout(gridLayout1); jPanel5.add(getJComboBox(), null); } return jPanel5; } /** * This method initializes jScrollPane1 * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane1() { if (jScrollPane1 == null) { jScrollPane1 = new JScrollPane(); jScrollPane1 .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); jScrollPane1 .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); jScrollPane1.setBackground(java.awt.Color.black); jScrollPane1.setForeground(new java.awt.Color(116, 181, 33)); jScrollPane1.setViewportView(getJTree()); } return jScrollPane1; } /** * This method initializes jTree * * @return javax.swing.JTree */ private JTree getJTree() { if (jTree == null) { jTree = new JTree(); jTree.setCellRenderer(new DefaultTreeCellRenderer() { final static long serialVersionUID = 453453411L; public Color getTextNonSelectionColor() { return new java.awt.Color(116, 181, 33); } public Color getBackgroundNonSelectionColor() { return new java.awt.Color(0, 0, 0); } }); File[] roots = java.io.File.listRoots(); File root; if (roots[0].getAbsolutePath().compareToIgnoreCase("A:\\") == 0) root = roots[1]; else root = roots[0]; // theres a bug in windows when treeing the a: drive.. we remove it // if(root.getAbsolutePath().compareToIgnoreCase("A:\\") == 0) // jTree.setModel(new FileTreeModel(roots[1])); // else try { jTree.setModel(new FileTreeModel(root)); jTree.setForeground(new java.awt.Color(116, 181, 33)); jTree.setBackground(java.awt.Color.black); jTree.setFont(new java.awt.Font("ae_Sindibad", java.awt.Font.BOLD, 12)); } catch (NullPointerException e) // catches for windows removable // media! A: ..etc { jTree.setModel(null); } } return jTree; } /** * This method initializes jPanel7 * * @return javax.swing.JPanel */ private JPanel getJPanel7() { if (jPanel7 == null) { jPanel7 = new JPanel(); jPanel7.setBackground(java.awt.Color.black); jPanel7.add(getJButton1(), null); } return jPanel7; } /** * This method initializes jButton1 * * @return javax.swing.JButton */ private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setText("Add"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { TreePath paths[] = (TreePath[]) jTree.getSelectionPaths(); for (TreePath path : paths) { File file = (File) path.getLastPathComponent(); ((ShareTableModel) jTable.getModel()) .addSharePath(file); } } }); } return jButton1; } /** * This method initializes jComboBox * * @return javax.swing.JComboBox */ private JComboBox getJComboBox() { if (jComboBox == null) { jComboBox = new JComboBox(); jComboBox.setBackground(java.awt.Color.black); jComboBox.setFont(new java.awt.Font("Lucida Sans", java.awt.Font.BOLD, 12)); jComboBox.setForeground(new java.awt.Color(116, 181, 33)); //combo hack to change arrow color int children = jComboBox.getComponentCount(); for (int i=0; i clients; XBMSPServer server; Timer timer; public String[] colNames = {"IP", "LastCommand", "Dir Handles", "File Handles", "Transfer Rate", "Client Version"}; /** Creates a new instance of IncommingConnTableModel */ public ConnectionStatusTabMod(XBMSPServer server) { super(); this.server = server; ServerStatus ss = server.getServerStatus(); clients = ss.getClients(); // fire a table update every second timer = new Timer(); timer.scheduleAtFixedRate(new RemindTask(this), 0, 1000); } public String getColumnName(int col) { return colNames[col].toString(); } public int getRowCount() { return clients.size(); } public int getColumnCount() { return colNames.length; } public Object getValueAt(int row, int col) { ConnectedClientStatus client = clients.get(row); switch (col) { case 0: return client.getSourceIP(); case 1: return client.getLastClientCommand(); case 2: return client.getOpenDirectoryHandlers(); case 3: return client.getOpenFileHandlers(); case 4: long bytes; if ((bytes = client.getTransferedBytesSec()) != 0 ) return (bytes / 1000)+ "/KBps"; else return "0 KBps"; case 5: return client.getClientVersion(); } return ""; } public boolean isCellEditable(int row, int col) { return false; } public void update() { ServerStatus ss = server.getServerStatus(); clients = ss.getClients(); this.fireTableDataChanged(); } } class RemindTask extends TimerTask { boolean keepRunning = true; ConnectionStatusTabMod caller; RemindTask(ConnectionStatusTabMod caller) { this.caller = caller; } public void run() { caller.update(); } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/Main.java0000700000175000017500000003376010540072762023513 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Gui; import java.awt.BorderLayout; import java.io.File; import java.util.ArrayList; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JWindow; import javax.swing.UIManager; import com.superhac.JXBStreamer.Core.Debug; import com.superhac.JXBStreamer.Core.XBMSPServer; public class Main { private JFrame mainJFrame = null; // @jve:decl-index=0:visual-constraint="326,89" private JPanel jContentPane = null; private JMenuBar jJMenuBar = null; private JMenu jMenu = null; private JMenu jMenu1 = null; private JMenu jMenu2 = null; private JMenuItem jMenuItem1 = null; private JMenuItem jMenuItem2 = null; private JMenuItem jMenuItem3 = null; private JMenuItem jMenuItem4 = null; private JMenuItem jMenuItem5 = null; private JMenuItem jMenuItem6 = null; private XBMSPServer server; JPanel statusPanel; AboutWindow aboutWindow; SharePanel sharePanel; MainStatusBar mainStatusPanel; SaveAndLoadSettings settings; private JMenu jMenu3 = null; private JMenuItem jMenuItem7 = null; private JMenuItem jMenuItem8 = null; public Main() { this.server = new XBMSPServer(); // load settings loadSettings(); initAboutWindow(); initSharePanel(); } /** * This method initializes jFrame * * @return javax.swing.JFrame */ private JFrame getJFrame() { if (mainJFrame == null) { mainJFrame = new JFrame(); mainJFrame.setPreferredSize(new java.awt.Dimension(810, 610)); mainJFrame.setMinimumSize(new java.awt.Dimension(800, 600)); mainJFrame.setTitle("JXBStreamer"); mainJFrame .setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); mainJFrame.setContentPane(getJContentPane()); mainJFrame.setJMenuBar(getJJMenuBar()); mainJFrame.setLocationRelativeTo(null); // add status bar mainStatusPanel = new MainStatusBar(server); mainJFrame.setBackground(java.awt.Color.black); mainJFrame.setForeground(new java.awt.Color(116,181,33)); mainJFrame.getContentPane().add(mainStatusPanel.getJPanel(), BorderLayout.SOUTH); // init statusPanel initConnectionStatusPanel(); // center frame on screen mainJFrame.pack(); mainJFrame.setLocationRelativeTo(null); // init aboutPanel initAboutWindow(); // show share panel first displaySharePanel(); } return mainJFrame; } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.setPreferredSize(new java.awt.Dimension(800, 600)); jContentPane.setBackground(java.awt.Color.black); } return jContentPane; } /** * This method initializes jJMenuBar * * @return javax.swing.JMenuBar */ private JMenuBar getJJMenuBar() { if (jJMenuBar == null) { jJMenuBar = new JMenuBar(); jJMenuBar.setBackground(java.awt.Color.black); jJMenuBar.add(getJMenu()); jJMenuBar.add(getJMenu3()); jJMenuBar.add(getJMenu1()); jJMenuBar.add(getJMenu2()); } return jJMenuBar; } /** * This method initializes jMenu * * @return javax.swing.JMenu */ private JMenu getJMenu() { if (jMenu == null) { jMenu = new JMenu(); jMenu.setText("File"); jMenu.setForeground(new java.awt.Color(116,181,33)); jMenu.setBackground(java.awt.Color.black); jMenu.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 14)); jMenu.add(getJMenuItem5()); jMenu.add(getJMenuItem6()); } return jMenu; } /** * This method initializes jMenu1 * * @return javax.swing.JMenu */ private JMenu getJMenu1() { if (jMenu1 == null) { jMenu1 = new JMenu(); jMenu1.setText("Server"); jMenu1.setBackground(java.awt.Color.black); jMenu1.setForeground(new java.awt.Color(116,181,33)); jMenu1.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 14)); jMenu1.add(getJMenuItem3()); jMenu1.add(getJMenuItem4()); } return jMenu1; } /** * This method initializes jMenu2 * * @return javax.swing.JMenu */ private JMenu getJMenu2() { if (jMenu2 == null) { jMenu2 = new JMenu(); jMenu2.setText("Help"); jMenu2.setBackground(java.awt.Color.black); jMenu2.setForeground(new java.awt.Color(116,181,33)); jMenu2.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 14)); jMenu2.add(getJMenuItem1()); jMenu2.add(getJMenuItem2()); } return jMenu2; } /** * This method initializes jMenuItem1 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem1() { if (jMenuItem1 == null) { jMenuItem1 = new JMenuItem(); jMenuItem1.setText("Debug"); jMenuItem1.setForeground(new java.awt.Color(116,181,33)); jMenuItem1.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem1.setBackground(java.awt.Color.black); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { // debug window // set the debugger to true // com.superhac.XXXXXX.CORE.Debug.Debug Debug.debug = true; // open the window new DebugWindow().getJFrame().setVisible(true); } }); } return jMenuItem1; } /** * This method initializes jMenuItem2 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem2() { if (jMenuItem2 == null) { jMenuItem2 = new JMenuItem(); jMenuItem2.setText("About"); jMenuItem2.setForeground(new java.awt.Color(116,181,33)); jMenuItem2.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem2.setBackground(java.awt.Color.black); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { aboutWindow.getJFrame(mainJFrame).setVisible(true); } }); } return jMenuItem2; } /** * This method initializes jMenuItem3 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem3() { if (jMenuItem3 == null) { jMenuItem3 = new JMenuItem(); jMenuItem3.setText("Start/Stop"); jMenuItem3.setBackground(java.awt.Color.black); jMenuItem3.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem3.setForeground(new java.awt.Color(116,181,33)); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { // check if server is running? if (server.isServerRunning()) { server.stopServer(); hideConnectionStatusPane(); } else // start it { // Set all the server settings! Then start it server.setVirtualRoot((ArrayList) settings.shares .clone()); server.setAutoDiscoveryEnabled(settings.enableAutoDiscovery); server.setPort(settings.portNumber); server.startServer(); // load the connection status panel displayConnectionStatusPane(); } } }); } return jMenuItem3; } /** * This method initializes jMenuItem4 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem4() { if (jMenuItem4 == null) { jMenuItem4 = new JMenuItem(); jMenuItem4.setText("Settings"); jMenuItem4.setBackground(java.awt.Color.black); jMenuItem4.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem4.setForeground(new java.awt.Color(116,181,33)); jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { // SettingsWindow sett = new SettingsWindow(); SettingsWindow sett = new SettingsWindow(String .valueOf(settings.portNumber), settings.enableAutoDiscovery); JDialog settingss = sett.getJDialog(mainJFrame); settingss.setVisible(true); if (sett.isResetServer()) { // update the settings settings.portNumber = sett.getPort(); settings.enableAutoDiscovery = sett.isAutoDiscoveryEnabled(); } } }); } return jMenuItem4; } /** * This method initializes jMenuItem5 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem5() { if (jMenuItem5 == null) { jMenuItem5 = new JMenuItem(); jMenuItem5.setText("Save Settings"); jMenuItem5.setBackground(java.awt.Color.black); jMenuItem5.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem5.setForeground(new java.awt.Color(116,181,33)); jMenuItem5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { saveSettings(); } }); } return jMenuItem5; } /** * This method initializes jMenuItem6 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem6() { if (jMenuItem6 == null) { jMenuItem6 = new JMenuItem(); jMenuItem6.setText("Exit"); jMenuItem6.setBackground(java.awt.Color.black); jMenuItem6.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem6.setForeground(new java.awt.Color(116,181,33)); jMenuItem6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (server.isServerRunning()) server.stopServer(); System.exit(0); } }); } return jMenuItem6; } public void hideConnectionStatusPane() { if (statusPanel.isVisible()) { statusPanel.setVisible(false); mainJFrame.getContentPane().removeAll(); mainJFrame.getContentPane().add(mainStatusPanel.getJPanel(), BorderLayout.SOUTH); mainJFrame.repaint(); mainJFrame.pack(); } else return; } public void displayConnectionStatusPane() { if (statusPanel.isVisible()) return; else { mainJFrame.getContentPane().removeAll(); sharePanel.getJPanel().setVisible(false); mainJFrame.getContentPane().add(mainStatusPanel.getJPanel(), BorderLayout.SOUTH); mainJFrame.getContentPane().add(statusPanel, BorderLayout.CENTER); statusPanel.setVisible(true); mainStatusPanel.getJPanel().setVisible(true); mainJFrame.repaint(); mainJFrame.pack(); } } public void displaySharePanel() { JPanel panel = sharePanel.getJPanel(); if (panel.isVisible()) return; else { mainJFrame.getContentPane().removeAll(); statusPanel.setVisible(false); mainJFrame.getContentPane().add(mainStatusPanel.getJPanel(), BorderLayout.SOUTH); mainJFrame.getContentPane().add(panel, BorderLayout.CENTER); panel.setVisible(true); mainJFrame.repaint(); mainJFrame.pack(); } } public void initSharePanel() { if (sharePanel == null) sharePanel = new SharePanel(settings.shares); sharePanel.getJPanel().setVisible(false); } public void initConnectionStatusPanel() { if (statusPanel == null) statusPanel = new StatusPanel(server).getJPanel(); statusPanel.setVisible(false); } public void initAboutWindow() { aboutWindow = new AboutWindow(); // aboutWindow = awindow.getJFrame(mainJFrame); } /** * This method initializes jMenu3 * * @return javax.swing.JMenu */ private JMenu getJMenu3() { if (jMenu3 == null) { jMenu3 = new JMenu(); jMenu3.setText("View"); jMenu3.setBackground(java.awt.Color.black); jMenu3.setForeground(new java.awt.Color(116,181,33)); jMenu3.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 14)); jMenu3.add(getJMenuItem7()); jMenu3.add(getJMenuItem8()); } return jMenu3; } /** * This method initializes jMenuItem7 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem7() { if (jMenuItem7 == null) { jMenuItem7 = new JMenuItem(); jMenuItem7.setText("Connections"); jMenuItem7.setBackground(java.awt.Color.black); jMenuItem7.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem7.setForeground(new java.awt.Color(116,181,33)); jMenuItem7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { displayConnectionStatusPane(); } }); } return jMenuItem7; } /** * This method initializes jMenuItem8 * * @return javax.swing.JMenuItem */ private JMenuItem getJMenuItem8() { if (jMenuItem8 == null) { jMenuItem8 = new JMenuItem(); jMenuItem8.setText("Shares"); jMenuItem8.setForeground(new java.awt.Color(116,181,33)); jMenuItem8.setFont(new java.awt.Font("Samanata", java.awt.Font.BOLD, 12)); jMenuItem8.setBackground(java.awt.Color.black); jMenuItem8.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { // SHARE PANEL! displaySharePanel(); System.out.println("share panel"); } }); } return jMenuItem8; } public void loadSettings() { settings = new SaveAndLoadSettings(); settings = settings.loadSettings(); // could not load... start with default if (settings == null) { settings = new SaveAndLoadSettings(); } } public void saveSettings() { settings.saveSettings(); } public static void main(String[] args) { // launch the splash screen new Thread(new Runnable() { public void run() { try { JWindow splash = new SplashScreen().getJWindow(); splash.setVisible(true); Thread.sleep(3000); splash.setVisible(false); } catch (InterruptedException ex) { } } }).start(); try { Thread.sleep(1000); // a little extra delay before the main window } catch (InterruptedException ex) { } // Set up UI defaults UIManager.getDefaults().put("Menu.selectionBackground", new java.awt.Color(116, 181, 33)); UIManager.getDefaults().put("MenuItem.selectionBackground", new java.awt.Color(116, 181, 33)); UIManager.getDefaults().put("Tree.selectionBackground", new java.awt.Color(116, 181, 33)); UIManager.getDefaults().put("Table.selectionBackground", new java.awt.Color(116, 181, 33)); UIManager.getDefaults().put("ComboBox.selectionBackground", new java.awt.Color(116, 181, 33)); // launch the main window new Main().getJFrame().setVisible(true); } } JXBStreamer/src/com/com/superhac/JXBStreamer/Gui/images/0000700000175000017500000000000010540072762023215 5ustar sjscottsjscottJXBStreamer/src/com/com/superhac/JXBStreamer/Gui/images/P7262531.JPG0000700000175000017500000012464210540072762024544 0ustar sjscottsjscottJFIFC  !"$"$C" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{4 nhbj:J(f:R.J:3KEu/~)w J*hea{ٮ~y \|1z)n&#NJ\(Gm+f;*bȫGԊ\,i aU|Ucyj湈1M=Z<{ѫѠ\yx&oi2=̎p5̟YV$ I|VWی&q«HN?fk?Rj~p/4rG|x9 S#rn8عKZ^q޼MsU{0 j/_]J~i1s]W2u Ws li?1s[R^ۏ6/[ mIݤ"\[h\V3߅5E_xv%yb ݪ䞝}(h9!O0O ߎk?ZpO١93oYc_Қ|mGN^p})D\Ϲ? mS?֛'&6Pp}KhfImÊ|.ΞO_!ź?}ҹіʆ>T#u7@jy*E1?SKVTH|(UҗK|ec֦[h ]ʆ,qͭhkz Mz쑈P$矺:fS\!}Ym#'l=9&oޑkV=${s>椚(Y&@ru(ʻ 읮\H~j&9?!b~wz6@GҔZ°l} ,VGR1@ (V-9B*K6AqLDcҚ H(G?MQR&bi`Ees!=6?fQvٷ?.rkIAYJsݮq=֟#0bp z]aƗ񴖺 ĊNũֿ <_q?p)ϧs=վMcޡ6 k#98g=n~%v\G-#8d~uKdqr2^¥X ޽f"+3H q-f ۘem86`@)7ڦKI m'o<9r)jngc!-!~.v+OTL[dvI^jkaqsO.+BO.LEj_=T7OZf=-u GRuEIgl3izJGx'TW8r1:gVC q$l3IQҾѨi4[ )<(A#Xv_r#ۣm%*Ĉ䈜+­/M*#2pz$q^im"T*F>5moV _"kU^sɫiX-vkDFR"vāHP0p*d< (v TUQR9BE ӭ$$4тvO^3_;g q=onh r9DFeN3ڜds[9ܻA^bͲ)qwEmgMd¼Cp}k/i-eBNJr=k{&ӱȥsI# q ǯ_ZױJ̯UMz겦e`!\׸mAqkg6.mH`+#u k;3MPC4-.9pMHr-eoDcP\HԱH:RJۤf4vX]wy@p92 Mn? ~Fy.~J?1PQ+?zݴYD1mA9?m]rNY>~ b *bmxSY[(c;ZFG~ >RRծɒyܑ@9\i^$-|<:|da Pz֦l!ѵ\ gf#yjhZ*}*K-zKk7G$5b~(=5Sd)0ھ*!L_\|b?jAؔo?S}.?S~6:5ޘnEm.3ؓ_I=tۦ_Nj R|s1y)-44G3)~ĭb?m:OD2ū4DRja|}w-Ν6=j݁54^*gsUUøMjuE]Kwbx&ฉ3u*}<]7I5C}Uau/Vd!Q|x?d1NQaRGȝRC*32I=wWc'(ןo_oZM 4> }Kem86sIn9]ڱo~.ӓW%ޗ9+&>#F E*.<0.ۍ5TϠmr^jc{~%#`sF|&m4FԨף:^ &{c[k {dS=j A) :ZokKfS1 {qZ_4k:?h }:0|'N0QV3M^]z&+ ' ZEAL^'=^kҼI{?ppN18xy$?|Ch5/ B=F8Px`d F֮/+/A!۰6=O\Q:1*1}Vp e}Oyfx<=zNCaAb׬xՎ p8 7Q9}^@5BI?2_)w62QX ރ˃o~i ORsur?o> xʣu'9漻NtҦa۝֕n}[|,rv|T|OH1p^)v?xJi"rt?: ,/Utqt<ϙ3 d?J\W |gʹ1"Sӭ;s!83C"%hb`c{Zۿy $]9S ~gT\'֢}Ui~ƺ tXs#C8^raNNZN):(Qڞ)SJQUV \735djJF?QN;Kci֞A dWYԞ>@TjO!GAeҫɴ9<Z#.Iz zUFF׃59.dRIBSx^sLWQMc45+i\ܤl`ׁݺCBI׆N-A=/x( 1qܪw튩D?t뗲~woT:uگWsII_cyxOЫdl95ĺ";eX  $OJMv Oj^2[KJ9Fr8g+ښc+WiRm]}4'!ʹhNTNm“L֭/fX8`\Yt9N2Z_]?.Y~♡QjiR>]鍃bG+֮{٤o2sC?k𖯤ZE敠u& Y6cQ×:T 2[6Ï%q:p)%og}Z4kNOMG( bVk{պ ` W;gMG_;wY2{|V;YXzQҜ`UNn^o -NĄ:2$cFrpm?]kn#~ҵ?gm*MQ|XXϧKf Wzm]  ~dU<<a'iOz?;Sd[*wTU=6 xMχN ɒ-<ʟw/K*Y[3n9_]x!y+GG`KH98s*iI*hy˚ֿo> xWPE$嬮GGvqۨ RuCJ?w"{ֻ ~(iW×Kp6;^6 Qv> ozTW :4GD1 OQ=iWO+ф?c߯bj?/mfT+ll<ѥכYql9sʻWVᨴ ]jWqw1l1bo<9CPDv?ʪTe3)5/gx%wR x`c]ΝYހbr $a |=xRUJ'+ӡz7(jҳn're޿(T>FS׌\cx 眅C=c?q%Բem ΣGQ=*iӋyn|<|Emb-nFw_'|J^j[K$HwRܔ=vߎA!Ϩ7`6aҖg=Q~5{_i~?&ZʹYWRñ4Qԗ3߯rT$˳_y_cVg_YaO:0p?Ug"Z^n``4r?+ =;&&Xe2>8g|Z:̋ Indby#Ak:w qodAy]SRHܻd.a$J\Wzl i 3Bȉ*Ѩ獣D`AJ;[bJ7e}Z')6ռ)!?x-nfa5v(gIYl<1YŴ\*J:,cGঽǾ9|%e+]OתdHԟ5gsuV3<,P਑)8P{dMg*~۩FW>{zw>m? _J7ňׯjH~9fP=0#~ |:Gnȟ g˱`{IOX%ۏ'7R۳+K#݈<H9SWVg Rw+_i1F`bc *tvU<Ʋ?iE[#w sg/!4S̶`snhᗣ:Gsm>[YV ZdC0'PyR[=Fz[ =H:w+c,,C`{AϮrztWc]H72?ɮ(VYV/-rd*#`'3^e:E*VslbvAS7cX>}8D.CH6>:c4t٧mo*\`_kmSs}}B!Vaucי~ך 5vHz6BAV<5+B/XGۮY5/?δ4SoI_/)MiPhZ0uj9jE xR1E`Ϳm+| ZgûzF5]ˁ9>2+cKD'xՙҖRltoʐYV˓g[^&I6H8*y?=`kx床,h.W )kk$?(ϡy"nUr#[:̚6,+ -$Z֭3i*i[pfx c?J *c%Z/~*xŚ4^Z69FY G#%Cd㧹҄UjΫ-[OżѰdt8*á'O;(m-hyQRtԥ~GkNJ~$j%4[F.&Y%FV';;H'$cUqN4VBZue7vzO~0B@K"5n['mn?."mC`6qkƗ)*}{u~{y% [Ԏ}ؓYeXV#[̓lኰ`9X:үhZ#u%9sIݞiŖ$[[u(u #33ƞ&^)=VFs#,]sX "cx^i*qҮ.Tqq ]N˕Nٸ#"-X/5Xw*Z\*X_cAkHs˜t&JMlIj0nNJٶx8&mWoV D~`Ic[;iv1Oz.Y s% lgnXj RZ1>VBW?7 ]Km>*f qsC 03^szoHa9q*ˎp23 ~n=o#qIIa4|;id*H@sV%Ǵy*'FTO$?dto)R*'x$yG큣}WwsFĎ^Ҋ2Xx3%ொ&O(<0 4Hn~mX[ƭZp}˵e_G,g!hWO&<֣)fOOhOZjAH+6 ?6QGb֮E_^f-g?UJY?? ƺY-ߣ4Su>28n[!e  c< O,Y73sq$ڦ%9A(ۿUZ\4sm?ևn#w/mG-n?湡}iWՏO: ua ¹KOًvtd_c)?œC?V_4qֹ_Ύ@Qⴠ?0~T[Q9?:kXJom4S޿ά!?q) U)j6eD};~Trz};/,?il8?*pU_ʟ/3:mt?F,:EjLsչT\X>4 AYt=eM9 _3H?5^ʿ[IfU2ǰEO_ )#ú?ԫHdе9; KffYR:zq^1\5 bKdz銵'S7N3QRS_~J>TÁU޵a,wWڝ4ft(G# U񶑪Ximz Icq%䎜 u刽NioIlwa:W 5A[qbx R-kS1;q}&~jst@ߞ֎TOܿа]<-QuKQSH=ɦhSғֵjʿk} j$ʬ/>HQx4{շ^҄P{u> ]KXTe+`d u׮+A*v6Ґ%.T[O7k`9?]m㿥q-D.@2StixًFAYIl`j~2|#Lr=L 9F)h|򕔑:y-ïh_6v'uEQ!1^̤0vg I@Zhjz3jUY3miǷ֑C֤ZSj@>2{*һ\Ovq+J_]#XUoYbz?Һ ᴽ?Th%mߒ±Jڏza?bRu'IQE,.U41HA˸?K{XW!c墶ߕO݃T cG|~DkʕJӌ#+i~kjzW}\4e^g'ժ+I-(XQ]߻sWWhϧpuxOTw>>~]<At?cn(?:ԿB.>3m[\2k@_h:d'8 JO- /?>o>@ۿHtMz׃طVhZ/4}m.򒝗~ =/~決X[)mgX+[7·7V!s<"#A#МmvڴGm 2H:W'yϋEvzonWI&Wd_dLjcQ"±v/Sl5j|^%/%#FMxs0 }s f_N_U{ &OA%]\y9>bIZ9QS{Bש|-ոPKhUD<:| X똢}SFpp_U[:0'R{#mjF9xry=Mam[R]MqrcyS:*{WJ͍ŚFFrOAȬMՄ7X n1ǚOJUV'Oo3Z|w/Ś4sVj75̬(ϥ:NH&SvX!yoI"m W⧍mMa AEy>y9<zS%H?]v &川Sz-ȎE_scK֒[eIq)R28¼|U@,c=j i2 ;+5Q?.+r$"fr ,jmb\Jl+' =Gs0f.;ovv(\rȒ:'fBMz,aڈr6JV Rчp3}bx)c9ZvvE"\u8ߋ:og0nf09_Oˊ1;;H9@|]5Dž5K}ZVpkhuTփE~@V:Jk'[JOO+'Vun U# ݶtͥ\W~o7 /{%ܦ2{{ד_|,?S&Լ!/inūc}5Ч8~Hƽ5RUbfbnd;XGe>ь+.uFξ>r۹L=pG`W3Y[vج)jGl?}U.]PBHw?@BZO$-uA,C+߇Ƹ:з΋iX2F IXg%VxQw4 ܢA 1b-g`S6Wm|gAuCӾ{af㝧}5m0Z-11x_~˺5 5x⸱i6!w83^{xv$Ws|u< ^S<TXnG95]zԱ1S`Zbu"x/ mn܈8m 0WxŞ mW|ĻX|8BGVl녂4WiQvҨFJ 5y (2Mz_{=$yrIq?Z 6*#ۥX@EEʠTluP ax𦭵~Fsa|IujcYc~c?8;>NU22`^>וZ^F ry_8W@u#yvdEq3.p s >&Vܟ]!/TǭAPs iljv4Y2PyQz(H D)ݩ Kc;zFʸAWk6.3\P+Z]LjnIq(v W5jJkf8Fr.J WG+LWGgECIc 2^Ȯd s{gEKeg+Od5ΩeP[o |%VYXN\aN[>{*kyojL9b,ݶQs%y҂FC6Gv cy|=p|pySVs笔Tv%_G*r{akۍG46+w%P;2PbrqvԾmj(};+Iv:J乵>ufU2Sc^*޿vu)9Įw5_jXvgzwI@Gw# mCRISf*:4Ԥw#CP\1dG֢݃GE Q?g 9?}|/U>Һ1+3ϖ5ގH$,Ms4J\mJEni138q+u_"p^k<<׺:WO;:.:IIF/dtRnoc..+x,n65Z]ru>/3T+3)7ҩ8x2jΩ~Vڥkd_{X8ym8aI]7q x>fl& <ͽyghBQ;dYwn^K 9ޥ&nՎvG#(9 k?hF[״ 8NM) X$9ɮLie\uyw^;X[]F9XY_9(—1 9¯/E=mySIh. WLV.>7G[{eb0@na7爼S}E8t3..vP=k.-~OD]/2Hc.E|znA4ZOW"xzɲZX2>T~9xTv_QC^j$6`Ϫω>45dvȋ(B(8'Fx=k|EZ [FS+K̽K7od*N~g4#Vw9Ž?U_g6_& c)\ [[FUgXpGc6W=H<қq J%m2h>vH\ugm=qZE(?D =p+м 6dRdu 9=+ϼ=jē/g|$xѴX_)UDi;U2]QsҿL55CWdq){m^k" nczсF1vvr3޹|-,͚/=R?;9ˉ1,E֩OTOfG͔^ҷ;N=+Ç+$?-b].۹F'gX)⋍6DiO% vF° qD'<>n5tMao%#0C'.A=&koZ K]8yݓHǥssjx8~oG :5{KDYXRN+#uڶ@)X#}q_XkW0G4&4D2[հ9}+_nm^k9ؼRٟ3 );y#o#|ΫUE%OJt,χWc"YS֗D9;Ii|AY'>BXZĒnYB#"tz V e(a ppw{zp׳Dt{ۧ3sR]"K 1֤aEHnSN6h@ZDR~sֽVY~gR vV-q\nrfb d$}h-G*83/ 1O+]bhl=]Rda>k^=FB=c-G(-?s?/Ʃ G㸑 G^>>#þ.|7H"{֬z;s^Lgfy|qe}pG_3o|U{4}*cN^j>RSJ)JA|y]oY[xOSKyUdu|m;G\WO+h~#i~a蚯, qoxgV8!;26sM~NtVCj2%,zU7])qILTXrZl\cXY ;>5޺J6֏ sx\g_U~rN˰c#`} G p2* =L03SpNLl^!۪}? ibR"ב6K1-x Z?ݦ[9䞤h?+HtɁ}"6q+{2=r!i林wڽėMTNj)-s] vm$}T n+*#kKkA<˿4 .ބSKQsJjAX3S'5\VA,1X[b$'^sq\!,W´|+vOU;!B҇}o1i{ JZM!? ZQ<mcWEmbmYp<Ֆ8 zT)f{kqh;{hG>ޛtY̹1(!5uԠ[ZFx*g0YizŴ^k{ŝ8m#߅0m:[Kp`09ċ?0ǯ<ׅ`.;qxyZi'&ºciqrI$rAfxA6G*@Ͻax[⏅$喇}Ȣo2.OU~xA -8#ezs6r|'dkװiw+l/20`Ϊ@ 2Ú8-*O)ot4 .U2þE70ykj#i~VF;vA=ힵ^i>l4KA[Haf`D ?UHUn4k/ܶ7*~:u,OJnz*9R\˯2İxníq05  _3#1_5x|QnSBqBoƾY>WjJN1?hu}N&_LҐ Ftl-q_zo'MϞOym >׮?Z: (i$#Tה_j6#Nj4_xV]AĈX Il )8%dz?㴁H;#!uaJ:oa!׷:6D) F7_0)= ʪ3_-O m1*xo$eNͱwg"b9 g#+/]58ɷz<5UC6ZńQM Mp5-5Nw l!{ UfEyJ t(sz}k$̭h*W˘wa~W o5Z;[m15gpe%UNys撖 U-z?du꼙ǫOZ1g#yq0dWEiH:VEq&cm1Ƞ{Ny+UEQ،FZn$[GO|^#ϋ3wi6 Xc^OqriH}+ o~T1$*wԇFzG?Apz[X]M{G?*̙l}cq,W\,z s[Vk6Y`kmO8F>Ե/j"dmW è>кN׬4FCȌGf#޻֞w>!$8#t2o$/j3|3HثnSE2(bk K*lwBr}u '9#5<i[zQ9Z@=,$vO@9< ˘McTޓ( f9$x89Šb\[[yD8TV.3PS21djA$`P=o'} anAUO_/CVq#G,wYFQ{|2귒n8XcEucjޥm(R|R؞YF:)i|a&{±YUF+kUk{$mVQ66?jE佦G㺳VGETg#_L4=>;U1!#1q9=k<#oxW@2YkqQXBkjTDm|7yu&!l rWEg32ZahJ2nӅ7#k:t{mkMm~ZpUm@0$B6~G_)KYKf?݌TxXWSdP>k,?M?&͟axw}z-Jki5 Y]71lcs^MDAfD#98^!j ?܍ezqsO5M6ͼrDctׂ<ҵZc1%{;>kZ#ƪ  5i%gx"Mt ;M[x|0i}Wɒ+7}i9Q,ypnM ӡt?WS{p5h_h$Bg0<-URm>|!m|dFN4=q ה~:̒twۂ7<좺xCCjNҧ؊$F~Gcp1V7^O7mq,:>p[Q]7"kvufǿ27Q+m6D׵kiE˺XSjݲ,0B.@$rI$i?3j6mhxtU~\}A{7;izf~7s[}P%\[J\2Obh#$}>u-> .o/!v€.mw=^͌iltSd#T`dT|H ,c޶?kxCڶQGK0U8ڥ2xėD&p1#Kc>=1 I|v2r[2p?TG+ˍ}lԵĬ0 ]R%5f^?x%O_4E޵o\6OKx }[8r*B){^uJ[m6K .Wc%sdz)/ [̷qh}>Un_ٚ_ #2}bXKt?n1sT>bܓ]iGũ隀~ ,>D* \t?W?QI=$~v)=e=iW%ISEt:w^n̶J7Z]'Kl!ȣ֦ ı))vڵFIE]k\SrCUM+Uoׯ2MVko-dzqY\ܩzPx3q69-w#wm#?yqe=yI?gZsuzuwMe0 ө̵KˑZ#S%{#XOҬX~ԩpGS4a]?Zͱ$E?x~0jjv7^mlN߅cꎺ5`gٽ?ݏĚfGl ]r >tZG敒Gcxs\B!sr۝G议#D iO\#Rs\>ChȧuJw,1Ķ3ӌ+}t!j]],l$20#5m`ʎ? ͼ$HQr\.G`r+G~Vm~ڕ AkA"-)ܰ'*)<1?~/{K} h/ቚ SnC`ZkZhWռ2ķ븴`:+A^U?,z:Um#&z<-8nC.ovnk&1y;}G*GX5) J聁Nρ2j%c9[?8q>x_þ&.],nI•QsI4dGdt}:spd(w-G#?< 3޵Grc #m'.bPM(@sֽ[k7V srCs,qI+ r:;v2hteBƒf]exz,[dԒOV _".[𜜑RU<85%"JII[ Yr=@U|SşK;(;7F#"ө]O{{q{t.%i8]f?5Wi=*֭w%u}""=3,kRX;j̧P "C_yRRydN~q޲mmFIIl$dXՍ(Hr=so°Sht4cj .xJ-7P=(J"SP%̃ F*IJ{fXBؒx' lĿj_7?#]}3&$?sG?#v1s 7sI[KmOP⥊xqM,j-Hɥh7Gc5|$fu 7!?JwcU Lo '@tņc6{Kr(TsKǥ[Α\쳀&F} qG2+GZm8`A)dg+_.伒쥧G[}^/O1Hvsqmm8ONpF/ ȟppk:r}l?^A xVpz8|=M}_C<þGc0C]@<ܹ24pַ"񷌌MrqIiИFr}:j~3Qin%޴-wR(m@rHAsƏiK9Y.|<υ[xjv%Anc\*F=GV2S{:,[c0{z)f.h9F>D9vTi/~&7$-Rj: #A8Dn??}ۑ{-8a`x:4:ռrf =HsIa@ەRfrjgtKRϽCjDc,H8榉b0jH`G楖Yc:/4 -z.&ލ@t=gZÑAi }?6]*K;+9ʹ9zN^^xr]IkpJA9PI׍1˖ڝzL\rQ+rzdU4)m.i9vVfnp?QJ:E!AXӀR"SAqR^7pҢ= !Zጒ("9$@sZ'ydGA=sqTLBU6~_}My!t*5Y15gR^ܻ2Y*OyOI=H @֋cSHtn{8U3 'b?Jv7{*ѝs6h9"jk$=p _+aO뭻]qԣ֪6| I*4hykXOq:<)?0տV-ѷAjԌ/F`ǀd8ZY:Mf;ׂѨMМM Яj:ʯHJҡ`N{r1OPԥij6v4y_$+EE<՛WX$' 0)bo:^3+Þ3ٕDк_6}eu B%1h& %PkƎ{uC):ݿyQB$#~d?BJk&=sYqM)2,IsFhvJSq%ð?!L&ǘ9K2( qn7֎!2Jn\g<}|? Z,q?eQ*rKb흎؝n#]һʳniy;R|{9:_ 9#|nLMs}*if!pF>f溟߉M[˚G5־n-/#óNz.|U^P!3Ź[<֠5i;H}ybxI_Z*CXH:7.xӱ)+8_S5ei-ndSpdG:O0H3k۴;;ҵmlQc[&Q獻=>I[_GoNCT‰Y?d?O4š_VN}"ᔸ`NW0zF4L2<'tF~ hѲM2[;tnm뽹UuނPB5" `fوSWfTvrd5嫞'&iCuZ{4Lxid[.G6 G1ں91ZŻ=m/61o{C5+Ů-cOaMzvkFKXFgfoѶV 3MqJ t0Z.ogiǪZɏEb8Ȧߣ?D18+ECW?* LNITom~o(ܒ_W~x+#_g&#R+wd[rrn=."[@?WBΣ#5o(^30Ma7}iğQ@ZwƁgF iagַu_2%Ǧy1jJEpzy="|;qs' R'KmIQa >k4JV`}Xڃ‘`%989k-9xtlGsGQ%2lI9 4ţacxm"8B8 AW tV77K"$vGB.wwoXͽͫEqWXܫ ώ0CZ"YȌz3)8'N}$ƼoOʒX[-{xB8{oϊ4Ak~Cg%ؐp7 0#N(dN \;TQVajY/w8^V9C,t3!1 &NX(P 9-Ӯ}kۊI6v؆wt˽+1swbP ^'OȸeNlpy+B~78+_R IbsOuyZ̓c}i?Λ7>c)9H3U(O#5Vҭ#=?ͱ*U{tqje.&*áPTyJ$5}H%NӬl8j@ߛ}Y";o 3kY$e{y6!aysLm}cf+8YzH=:9p^dIgm<gLv|W;OuI/ciu+B`n|09tjGk١?J๹&Xk|%= *?£_[\h%?TyAǪk- }x8d%ouo(JW/?޿"-B -R'Rl}0H?RW$omz<~*O: X0쎤~Oh^ŒYl2ǧ?ۍ?E,PDaSVbK DTu*?p)ynBG(I??%׺!&Fo^0 /XMotc?SG&ɒkvo.9;]F@C v哮_N+]=ƁbȲHceO&:c[;_}sVs,6g#?͌T2y)DOH_ML7&?J;r|kl [jIo"@yF 9 !qjXIud s ]) x$õFTV fߛޠdDRg5+ӢǘpoE]S@靳N}i2Įvu,35jG,0ڕccj@U?.A=}.V]0RH\o;eZMCsw.Uߡ'X{aN}=P7WM -$=GMΊ6mۤU'O UX;8rT{~mzصgr4zl#r%݁##v#$x⋵kEGUy`Cr9Y:k([џ)l>l{D!"1#Y3u$o>a.0 g#W]>>E2,oyfۑZgKӮnmaD;{n89k'G]dly.X楡IƬO6WHA ʜNqˏ1rI<ڄgAEGݞ8*[%UqP=1W\:}t͂o(N7LBxoר@k1zz0 hirOn c#rzU)J0W r_J@֕7Q%=4Rw0Dۢ#ʬ.ySyC1UzP) MU;yi[gAJ*4v!UGROAJV܂-ō¤{U1,p';$rm[a"!M>QBYsty?k`U*A`I$ٴ1K/M6q uv#ZvGPU6wZ2g sG^fIͬ͝""^p HkJt7ljq/Ԥ<9ط=V~kNeT ?!X2[Qa Nj_ ՘g f[당ye ^_$֒c'h pvRÂ?>+35x`SuJ4XL`Ʊ6Ҕ;RH㊍sJcZReҙMD=QUE>uQZ-94C3L9<իUPpz3ҙq\ۅF 3c{c> +e/H;~/!Qdp?yõjeż?+'aYV#2Z)%:4F>cW[UES2#Źr3k}If-X\"":}?AZO)a|9 IRtG~c,x!qk""}Yy56[+YiXcsFiZj k ꈌSqY4)2N#ɡQo 5q2`^W7InV,Z5U$ =NMMY" t(#_ҦaԮ5Py.0!zWӿJM\_HvaS9֕_տ0pq~/_qb`/dGLU]rGAf~C'ar \L^erh̅aQG4 wO!rfC@fqy1E1 l޷[{i-fGu* X$nzT=yfM*r15Ʊ}wdeXQn=/P^28*}+ͻAѝʢ4=J3 z-YTO ^%εk}E[2H?똴=4.͹!R@A=9cu%ωgEĖѺ!‚=92qZ'IKt$!pP_E>98O>7~_ߛ4]@Ikoou&t Ts2_3YդsaS+Metፁb7y݇ͷ=3^i}*O(3pzn`q]wSƜ=iZo6h>iXyx q{We~%\U엛ʲRֹ+c4'6}:fϥzE ~kt0rTⲼA,{haۿ>ƴGqgL=nOT 4rk|9!~c*r'5$T Db+zF_J0/&2jJ+j1-Ӛ[N}y19"AV1R@3zUJ纷YPv.yf3x9=m:*GrU忮T?RڔF-rg^qҭZCieIY65-?vs?k>tݝ)r='cұ|Bv<$.3-?Z[[)V"bOjm\g Pƾd@Zf__V54M&SHl#1Fx* $H/a9V e9s;w퍋n )D$Wگzjey$Hc#;Wd a霏M~$K[͔ !#;ns3w{}*'k}jdU˹ bs’=χx Ě|"~kL.eANeebȠ/s4Y%ĩhC#.㌋UU5ռ6*VڃX~.`w?ƺ.X.4q""hn)ydLt5`Uʷ<:ɤ\!o9)hݟʮX0TW8u~w fCEr`d^8 3L[-ZRk%h[sn[8s &Tbc|ohiF$f$e5%ݧkóɂ޺iZ:}y{9ᵳ7JִuZ=8c~==84|k9b.x^7`~^ Zk5Zpξ@f(khSRW^^{[ ;fi ɼN 7sTяoge> ׆{.nni5P륙d~>rW xj k7$Y~ɼp `u Ĵ/;X# h!ڴLEG0SktfɃ,߆?߅.wIqD/@*Oz‚Feq#ҧo{K\{7_Ȑg!p0@ q>gI* c'~1j1C[FZsrjӾT(+[A , AQ9^uкyUi:sz7? &yRݽ~ž'{i]8h FN~_[9mB7XFKT]ңzc%jmF >jpG\{nvFK5_-ik ȱG#*̧rޙZZu 4Ȍ 69 C@Fjz{,q_#eݴe@;YYFs8xoOZ:jR5Ӵ_xIfԮ g ?w@M[ҵ+SK51')W Zޱ&BU$112s'%yk^W] 2vV1492€N ֊]j?iY]wNglt]PE쬂k{K%ZLیⲼuhܫSmkXCi*>l5|9Ԛojt'I_"K7`s4~,ZmĒh}ַSqPSW=ƟcGg%Q[B7° SUlJsNկ pzQcD#c{5մ;o;+0@Tp9J-t%û)9<~{j7$O{/".r+{;kvl=:uϝbMGU&wzb3XSչAqQAg OwFӜGH7pnSj5hdfI "`;cp>Z! `+\6v_2hU}E\_D?HB~JZLP:iE N9COz(4PEwb^֖bUbrMҀ4.uk떍H*>1jjPMq9qz{ـ>^L-B?)B[k; pS v xto~,I/v[ oeI#v]w瞕2x,Wݱ:?qEqsBY~GRZ]Kln3gC)n/BR~_t6څ֖~ǫC۸%aGF [ZCCn> f J?7wVo?/G#!ou1${t^wSt[yj$nA#.IaW!*@GRW׫|vזfeb#LH߯֟q Өܙ9OS[\MeF7FVScHNfHXeOF԰_\BUw$}QRG%di!/Tn_n?҆\Z_ Mݦ]_!%f׽S޶8GaKVЉ,|HF#>F?v{frqm#9K =G)~~9^FccG}|&*Zƿ/m).Ahn+w44 fi2D"w(v=sz@3"Q1zy;7f_Zzz-2 F9$`ۥ]} 8;S2c9h驥ĢaOCp3qZWgc +1Itl,f{(u&/dM5ԨWHq!GvU49-stm\s;W2;NI֜zS)Yw1?2)\,})pь=6Alv4 ;$^x+$}vp2p)NOݍ:)?+Ƭ" P@`1j##(.!`6 22?޺}N#Zŝ-ݴ~v?h%}?o0?^;YVH?ʚmUL{7@D^\2A4jJo# =7˸P9mk]%eJKy"{V͞lY|dz/F8-nO:zK*V,\ڹ B:iFiH ҅Ic׿ҁwCy46fvSXr$*AA;z{Tb Km/j;J .84qPP)i)٣`#N 6HZuۅZe'30*1J@⊛OfE~#i#P&+hZE;bSu8$|G|;I%*kw[w2郄̸e'R.勗Ȗ37miF_?ʛ}OEO[N:R/`<))zPf8*{D =@=jcAמ,gSfXEHKm|OZ|IpE2?&E?imԖ;[1YKڹbHܓVJ6a^HKlܣ<+2)s=zD `c&Ӽfq؎\Khv\\L㝛}9LLΝ%ٵI=}ʹ[T/IlTӥJF#~UzR(8ݟƁ+ Oo|YzSrYz谬m`>r=֥E(BgzJJ;1XURuf1J U#b:< Nõ5u59V{h,YfNWG@x$SHX,<92;Mۛ,O\%]K M/*6 .?w#)U.M.`|y{EdTS%ċA5|G>'k-<] 2sM[)qIjl{Vܡd~GhNڋؽxzyȳڱH?`zXE$gڔ] LG 8ծ"= TBmhjxo{N?J6[ܕ> +CAMܲ(zQ}zp ZNPJ 6}!攞h\;$㧵v.)Pzњ@]łB 󪐍*/h8'ڷᴎvy-eG?~2Scgl`Y+4ǟ,dzjU.'򤍢a#q(%k)=ZrȆ쇧>ns=O@iXbI=M73 c94sSKKIUSldY=MHv*ľ0VʼGzG^=g,YYI=FGEXXu]$xP$hRj71^Aβ-?Tد#Y cB8?p3i芿(Ҕ)Wb?҅l@`v9qɤ*5jK@Ѻʸ>Vv#<(0}k\~wt 6MYnR扌:qH(AP)hI޽~I@*B6xǢFC)JApE[P8d @;b= ?ЩEH<iq}G.KV܂XednԎ?: qns$G~]o;\ϽMg$Gц,ӸQC)*Tb)(9^FڰA~cW"&5RUnc-(Q5Z$ 2Tq7QHc\¢㤓ȆI;'}SKw" miz(2@82=eb[AҩKH_6(3z *5Z61lylOҚnjSsF#e=:( 'LDa=3Eu?2kF;{UIhVP hOgj~US=ZY$`G9e@K)u~^H܂)*8cHXu5 #3!\~TcR -t.i/ňRHcϩ#ڧn*azz԰. 9I#NRݖ Uu2|:UWm4(ŋ: m8EVaG&(QK@ Ez0 J,R$ح$ٸnyHӑ>F_ATbݐahrdtS2܏Q0PK[oF TBIV#")Edzc#Q7T }P?#C]Qq}c cb_~bHuL>F1nf ,q~y1۞?CfUoןs{y9]C\\ H6TTpƨ9;\1a+I,9=5lwahvq47O̹$ugݷ<Ŷ¨ܱy8~WYc?( 8t$~t=)#hFK~D9pC/>+@tTD)#q'4Ry u4jkymv3",T݁+(A֛3 >_Cʾf܆*߷ZͲ[iʗ)LA4"ޟ1OSoY~e'\'ҖF80J?u?TVqyn0*Ͻ ;][Hy1WHrXSbqH4\̡6OPsK6=Ң+u%<T{~D2qb8F[#TJ̮h-CHijɩq¼rOZڬPo=Ԭ欴G#03F?ΙS+p:o5l`Qފ(9SRq4P%v@ ̧r|?EE)4K&C2) /pNj: @SpF(Rbn}\9SّTVc+)BPW$JQA%,9{Ӆ9QKc8z+EsIyO{|*7MU}$fbsԜ 0RQAoJ{d1O3hڃ$qǽK<QyUbG$(<(?*kOJdaS&TQt.\`I8m Xe ac MC ܑhJXBStreamer/src/com/com/superhac/JXBStreamer/Gui/images/splash.gif0000700000175000017500000002620610540072762025207 0ustar sjscottsjscottGIF89a9`  %#/ ,!!!#7".!!!)))%&%%4&111655-,.N)#D2Q=@<5F5*K*=c 0h1d-B?LDY5KqGm1HJGVVSKONZc^KoHcZcvvvhght{U1BB1!1OD!U$T!Z*N,j)gjtsk!k't!s!t!k)bYNsw$i'!7*,9ÿج΅Cݼj)`~JH@uJ;dmX\W$?P\ .4:vtzر<)JΝiAJ+(PBZJUףIѩYN>7+ѷX^Ūժc*:jNA8KX5ǐ#Kvܸ}Z pA .l)Yͥ0p*Z.t@4\dG.wm3T??tYm~F*0e./p^dhtr|A9- `3@)q h-,*C{ؼ;ǿ{>؏_>"Y< %SASv1)qm'W6hz DMP8>NXh} X$d4!uY .vhG5~ݧ>:LS\l&  }g7v)ȑC=%P2C5fJӚԦ)Msϝ::ilChBRਬC@ DB )-MGni@ ԛ 3}kMW Uwk] & BPx{"@@H X?JLժ+D 8$ҟgi[ԻUzl*ڶ&-rմŀ y&< <̇%C5 pZy(+N gί` * Ԟ:la{j'0Ans[ Wͯ *` J+`@% & wP޶ ݅(H Vi˱2 ^յ1`;_7 N[/Uw?1j`@`~Є#dpV*Ƃ- ge`|QPBg.̏L0|ų XM'JK$ _b+0E({/^&>Dfg?l"Tp w_ y KG>?Rg8#p`ݗ,B3)oM3҃Nˀtsn֯(c$4Vw  ptL||N}10`G}X47@Ey5qLTTuWDTz%JA"K$b~`:G]R4Yy'JN7 C}Du|NP&9`=yiL aNPd%8~dn,?T'%JkXflalwJesc|R}OHbd[BuTN8V[4m/-x R]r !s:8F'IJZ0FDP^H((+HDX[]w\Lƕc}[6e~ ]3 pVp.7OI>P 0F*Y)19FP-)"Ʌ]yEub7t7btL 4]H qw'o{KBC > 0- ^@Ty -@Xs"9=u%2@h7vg'cjje؂I; G WwuBw8Д MxXixDȑ87%pb9؉gfl`HdT~(2"pNqs(`U0w7{ׇKBp% !01P_pؙ1`pԷ)XF4 )=[W_Hblhco9[BmBEp*QU6(9xGBy ډ>EpXiYg TlihF_>EH%dI3(g4 `MƏlfDy$4 Д- >>@%@'cɅu0jfdcGv+" = AʗQ/]?J::p!Y1^X]ZCdze*9B^Wbh\wDPy7@j2UP?CdZ)xfqc &pi6:e%7nqa0諴8@fIpB;)  T: "<$0 I=\y"}lc8)(+6UįW>[ffB  0FJ5PV :&XJ,t2 _h莦vp*F17">kHZEIA:FVdz!;uB`쪈l>[g{g)@!qr{ ЛjUw|XKసA%@5U!K)ZZ *s 3  >KS0 *Vx')˨밿KY۸c Tt;tV TРQqQ s<׬ 뾀;;[w/Z+8ylEt3MU +x[j۷; Z+z^UF0+u_~&v2[jJsò@rS0F׋|E{;I Zf*AЅǞq!hV˜tkciH5Tzfl Mkn,هAGldZX f(XV‡tiwh<~Aɟ's| 2L?a4j+G\e"*Yl3l{Wrğl Qd\G>ǃKʾ ĉ zl)jz &P`T ( 'x[Oܦ\!g5 : ""pkY̎:WK5@]ii`T`ʌNȲP6^>Ev\NA!m#; my? ~|6y&XyWyXxʖh(Կ7]y%x]PJ5<[P]y+Cc([f `L$hܨ#QEw :觠!<WlZm~<&Y HҾ=Wx-;t+`hWC;MÐ ~>e]J\h:ުxn _@qs'N~v@o3Z^W`fCޅ7U`[ 쨎]^(ˊLdȎr%L& 2ra0n*?.ƞueyE`-Z%I-iEhu+-QD/ .`,GZjƯ+k&?i+^?Mb?u6V) ԫq/ , @xyKo\!¾)"tzlDw: '@KfOM`+෯\p(D 4>m=W2uxu55ED59ɨՅEC0U s2blqqQQ`mp} `0/?O_oN.PҢ" =)j0JT$&02T-)rd .1nz †CY3 <+LvM[6oݾ;j9} 5ԩS XP 5Hbp#TB'L"YnԠTr׮0e Xdv E9z :v 2B` ?=J?}wB؊\FDK/e\1l1dgprY6z9]ɥMG?>}; *=+{+jRYGfpAJ"X 1&pN|(e|NIIӔRbQ=!.` $ЀB hIaTnƑ 4e|J2C/+M7Ug]F߅GNRÔj&:*# _68E<)XPBE[4\xPK. 6XL\j 'l}fwCUeSmʪhdv vހ';ڇ\ŀr [JJ.d)MMtOHjG˙Kn {+p 8wh~W4*zE.K4eJ/0WX0…vzݧ?- APޅ^IL)&'clyu)G"|v M 3Q%݂$ {.bɘ¼69ԛ]dooSP0Ͻ]D}C pS)a 1`酊i}eL. D 8 CkN|wgtXB+CEn40-L[/imk{7fjڋ 9[̼v%m BםEz%$`4@-d9rIvzl'LQTi{\ҁ&598Bǃ W Lap;d1Ba0@ń~Q1h{&(X}^#R>,FU=# *^@)5DԘ;>%0LɝUĤ9y lZ$==8 {0PNᅱCx:re4  4$MX`atv$5)F"Jfhg"|P4!@pptR5PqM2`ۣH|"sNԄ&vȑT&xViP RȨ$M h [0{>^%u:o=|03 Hh˛ ŘP<_dD5'kS—˦U5:E8 g $yCg mHU ]Xz @@'Ƀ$( eHL@CMq\(SkU  .8A fpU}\+q5pPJ9B1ƃJ*%ɩNBxn˓#(ۘ+h?A`PW$ BՈa=x* xpQovv`ոiፎp 7E U C\<, x |!'9I l ɃIEABV'4R'@Q YEL7WEhRlQog gY#"^qek{x`&"@g'G0A?7C Jh؈%xo HuQr_wAys9Mp5t`d@CW0@"``V`\s^WR*}zsgswYIl%8'yOd |n&,I8'CTڙM' 1j"@kJhh!}"XI{6WE3q)*1ť|٥q8=vE+eP&M5TR)"p'ZP(""Pp# gzgȃ,ݗqVuJ!?wr %ЩɞPu|D.br FFG;?N vz  4 p `A~*ͪ&"hHH 7Glydk\}\p!P" )d3KM*" cA [! ` 䊥аge`2|OZx?h 78@8@zrYk5، REPP`7Mp`AK0Z!@4ݐдn"QKi5=PY U b[@0j+ |nwpv{p;F!Ziڥ&,O[^:& a;_VYXtz'cCP%P0J麬+&e{I;#uI?*@4&¾.y6Q;Cp5sʫ8 I\ v¡H@yHH^?V{f]8.d u&7ЉFнJ%e̮=G'Tp TPA Fr7V£iC3Tt<T'r`%yEY("oVp}I^ڝ#']P p&L!yP>^5`PpW8(ǹwX{ YiW$*G7C. zQyD[oIGi =GzF"0p&_# YKOpQ{KG   !(mE-n":>7~.^/8N䛸C~C}P~6.R>=.M8x94MBJ]c8dXHQn5~.~Ⴞs|uyQ.m]`<#.>g㌾A>N^^楮fnZ꺾굮揾蠞n^IMq~xNv~>N饎^~.%Np">⎗Ne^nnoO>wۮN$@ܮn!'о*Oj_2//(8#4/n5/%H=_ήF5dI+/O>1SY$rZ8˔Ro?}5piN On`A`WA~XN9Or2GCҼq[UJ?U%bj]&]t{3'H[ϩłyVOPHgRt46zOXOC]Xi'OG~ԂN+o U6K=LYRRwN-8jp~~﹄EIZTT@8^>g9}~ڋl} HI x=ԉs36RhQ,~;PZkJ[ܹj/2?үo +Z̧Q3xXZ{} ?>` ?]t|d}dNkK\&IqAd(}S_9"8$ӓc8slA"btJ"KݣnyN)S"\r/]].:9sӡONDRUjQ&| \djA=¹ZTZA +reYLmݦ8G8iһmTзT o8}t/!wSlc_WOb;G&YWT' ޚjK•˒MXNn2!# UN5)tKgIjmrueWH{^7R z`q@y@@RqPtKv}kh,y=ۉ (ɮVyu*ϟJI$\*ဃ=h~RgWaތr=)SێmS z*@F)2)8s\M8.L[isg=k# KOwErkDk"JIlֲkHIe E)oN[ϼ v-+*AHޡI"NZj'PNN|@݌%F[V8v'>BI‡>scdq+S&Zݒ5WfnaƅU"d`.$=VP)Pħmf)OKa'f޻㊐\Mpm#zEC1W!'*ϕU\N9#KM-I>ɫ ER{Vz ⭯:Ap%4%?i=MgnEw$GK*u me'8  vhTp.s]T> 6Km#)ܔ-+\-譁犞k4kKW5wDF}T}b>tt5= &CGW+ϥ%(HJ%j8<3A<*\pk/!s{ GVCY#yz Olۯ-ZҦ?TR =)^֔Aї)K9S!J򔯎||qMuuSQZh-*mJDYp(FO:ǯK! K$b ũM +?e Tk+Kj TtOA^]}cx@gs #̊C,Xm\6llMFi 6qmo%ܬG73:5 }ZI3UdqmrqH㼦KhDGa-n s@셛zox>S_7a>3p+A} κ&܌EzRӿwރ-)`z2*R㭰` Q>y9W*`[kM7-q*s<}NJ*{TM'\m*Qg)ᷭWOӶX[I6b!eRy(tvIybU KPq8Νŭ8Q23mzyr\I<n:ǧŠH:j̘Jn(P`*w8ߛ. :h) rH%p~jC+86spiSPVW[/.\F# JmTN|>U6 'toh{QZ]DCUI1㥽"yR5鹪c,|Qeazp`~8K:NOonyԫӟMd:D?]FBot GI:X6QyVC~ $ZBx4cP۞Tvf'dn${wqߛ$-ָ0Қu.'`>45kf%"C*{>_KũtrJW#±w-tA?:qG*>Ud"$2 i޽x⣱rT)I[IG>5\--($:Vp<*1w NP?JWPMdeŸ" \[X#ϻ빺FssmZ,k*>G94O%ٛji%\}`VmsʛAꡐcL@BN$d $S>4-lLf559ܹn DJBۓ=ܮ/' SY]幈Q$)C=g:V=FPN@Nz(椱r82"qNEBZee*O+T\dD[k Jq2O?C7t\dXWJjDy+r%IϞ 04#IRou M5&B'cNpfmܡ!H-<9v>:f2kaY3^Xb!+w @4gnJ>L3YDs4QvFOx@r9nQ~aEHVy%Cz rժ_[v_J"iW yT]=Vwz|SY0 Bgʒ Ը-D(!(>\S6S1zwyJХp*nIYG}: Se*;+:zehޕ$=^oLtĵ-H[O@VpGr}Jzm6 Ox>&pb ϡ-Nq3c4]> N<=Z(C>r3ޠ+SdάDW` 62qN,uB yW%(>ƾCP#ұ""l;O=JN+(]D{\m$?:4or5B!}F qݺ܅٣2r_"~ʕU`QrvV+`ɩOX cj<P%9vw]cYJO'_QڞJ"Tq T}qr얞5m(Rz28u6;[1EGJKSjˮruϪ4G_tެXQou$H RҴoQji;'SJڅIv?iR.ȮkK 6*}t]w{*UqTI2'/"|!J'=W J\Wj*N *U&B1]wt*:9H{Ӟ*>Bv$giJL`}Д>T+3_?*TPJXBStreamer/src/com/com/superhac/JXBStreamer/Core/ServerStatus.java0000700000175000017500000000200610540072762025432 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.util.ArrayList; /** * This object is used to get the status of the server and the connected clients * status... * * @author sjscott * */ public class ServerStatus { /** is the server running */ private boolean isServerRunning; ArrayList clients = new ArrayList(); /** * * @param isServerRunning * Set if the server is running... * @param A * list of ConnectedClientStatus objects */ protected ServerStatus(boolean isServerRunning, ArrayList clients) { this.isServerRunning = isServerRunning; this.clients = clients; } /** * Gets the list of ConnectedClientStatus objects * * @return ConnectedClientStatus objects */ public ArrayList getClients() { return clients; } /** * Is the serverRunning? * * @return True = yes, false = no; */ public boolean isServerRunning() { return isServerRunning; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/InternalIPFinder.java0000700000175000017500000000451010540072762026117 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; /* * InternalIPFinder.java * * Created on April 4, 2006, 10:00 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; /** * A static class for getting the servers own binding IP address. * @author sjscott */ public class InternalIPFinder { /** * Creates a new instance of InternalIPFinder */ public InternalIPFinder() { } public static String getLocalIPAddress() { String localIP=""; localIP = getSiteLocalIP(); return localIP; } private static String getSiteLocalIP() { String localIP =""; try { Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface nif = (NetworkInterface) interfaces.nextElement(); Enumeration addresses = nif.getInetAddresses(); //System.out.println("Interface " + nifs++ + ": " + nif.getDisplayName()); while (addresses.hasMoreElements()) { InetAddress addr = (InetAddress) addresses.nextElement(); // if the SiteLocal is true this is the IP address of the host. if(addr.isSiteLocalAddress()) { localIP = addr.getHostAddress(); } /* System.out.println("\tAddress " + naddrs++ + ": " + addr.getCanonicalHostName()); System.out.println("\t\tIP: " + addr.getHostAddress()); System.out.println("\t\tlinklocal: " + addr.isLinkLocalAddress()); System.out.println("\t\tsitelocal: " + addr.isSiteLocalAddress()); System.out.println("\t\tloopback: " + addr.isLoopbackAddress()); */ } } } catch (Exception e) { System.out.println("Problems getting local ip address!"); return localIP; } return localIP; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/FileHandlerObject.java0000700000175000017500000001351110540072762026267 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.util.logging.Logger; /** * The FileHandlerObject maps Files to handles and provides services for * fulfilling client requests on Files. E.g. get file data. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class FileHandlerObject { /** The handle represting the file */ private int handle; /** The file */ private File file; /** The max position of the File */ private long maxPosition; // the real file size in bytes /** The current position in the File */ private long currentFilePosition; // starts at zero and always at the // position of the next read. /** * The number of bytes transfered from file. Running Total. inc on file * reads! */ private long fileTransferBytes = 0; /** The starting time of the handle being opened... */ private long startTime; /** the File Stream representing the File */ private RandomAccessFile fstream; /** Debug Logger */ private static Logger logger; protected FileHandlerObject(int handle, File file) { this.handle = handle; this.file = file; // init start time... This is used in calculating the transfer time startTime = System.currentTimeMillis(); // open the file try { fstream = new RandomAccessFile(file, "r"); currentFilePosition = fstream.getFilePointer(); this.maxPosition = fstream.length(); } catch (FileNotFoundException e) { System.out.println("Should not have happend(FIleHandler): " + e); System.exit(1); } catch (IOException e) { System.out.println("Should not have happend(FIleHandler): " + e); System.exit(1); } logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); } /** * Read a number of bytes from file * * @param numberOfBytes * the number of bytes to read * @return A bytebuffer containing the read bytes. */ protected ByteBuffer read(int numberOfBytes) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Reading and packing file data. Read bytes req: " + numberOfBytes + " Current POS: " + currentFilePosition + " Max Pos: " + maxPosition); try { byte data[] = new byte[numberOfBytes]; int bytesRead = fstream.read(data); ByteBuffer buf = ByteBuffer.allocate(20000); // at most 20k... // add check later if (bytesRead == -1) // eof { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("End of File... Sending null. " + "Current POS: " + currentFilePosition + " Max Pos: " + maxPosition); return null; } else { currentFilePosition = fstream.getFilePointer(); // increment fileTransferBytes += bytesRead; buf.putInt(bytesRead); return buf.put(data, 0, bytesRead); } } catch (IOException e) { System.out.println("Should not have happend(FIleHandler read): " + e); System.exit(1); } // should never get here return null; } /** * Seek to a location withing the file... * * @param offset * an amount to seek from the SeekType * @param seekType * (0 = forward from the beginning of the file, 1 = backward from * the end of the file, 2 = forward from the current position, 3 = * backwards from the current position) * @return True if its a success or false if not. */ protected boolean seekFile(long offset, byte seekType) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Seeking file data: offset: " + offset + " SeekType:" + seekType + " Current POS: " + currentFilePosition + " Max Pos: " + maxPosition); boolean error = false; long newOffset; try { switch (seekType) { case XBMSPEncoderDecoder.XBMSP_FILE_SEEK_TYPE_FWDFROMBEG: if (offset <= maxPosition) { fstream.seek(offset); } else { error = true; } break; case XBMSPEncoderDecoder.XBMSP_FILE_SEEK_TYPE_BCKFROMEND: newOffset = maxPosition - offset; if (newOffset >= 0 && newOffset <= maxPosition) { fstream.seek(newOffset); } else { error = true; } break; case XBMSPEncoderDecoder.XBMSP_FILE_SEEK_TYPE_FWDFROMCUR: newOffset = currentFilePosition + offset; if (newOffset <= maxPosition) { fstream.seek(newOffset); } else { error = true; } break; case XBMSPEncoderDecoder.XBMSP_FILE_SEEK_TYPE_BCKFROMCUR: newOffset = currentFilePosition - offset; if (newOffset >= 0) { fstream.seek(newOffset); } else { error = true; } break; default: error = true; } } catch (IOException e) { System.out.println("Should not have happend(FIleHandler seek): " + e); System.exit(1); } // System.out.println("Offset: "+currentFilePosition+" Error: "+error + // "Type: "+seekType); return error; } /** * Get the file name represented by FileHandleObject * * @return filename */ protected String getFileName() { return file.getName(); } /** * Gets the File object of the file represented by FileHandleObject * * @return the File object */ protected File getFile() { return file; } /** * Gets the handle number * * @return handle number */ protected int getHandle() { return handle; } /** * Gets the file transfer rate in seconds. Based on the creation time of the * object , the current system time and the number of bytes transfered. E.g. * reads. * * @return The number of bytes per second transfered. */ protected long getFileTransferRate() { long duration = (System.currentTimeMillis() - startTime) / 1000; // in // secs long bytesPerSec = 0; if (fileTransferBytes > 0 && duration > 0) bytesPerSec = fileTransferBytes / duration; return bytesPerSec; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/XBMSPEncoderDecoder.java0000700000175000017500000004541210540072762026447 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.logging.Logger; /** * This handles all the XMBSP packet Decoding and Encoding. This is used by the * XBMSPServerMessageHandler's to decode and code messages. *

*

* The protocol is documented here. *

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class XBMSPEncoderDecoder { /* Indentifier message on inital connection */ protected static final String SERVER_VERSION = "XBMSP-1.0 1.0 JXBStreamer Media Server 1.0\n"; /* Packet types (e.g. type field) for CLIENT's */ protected static final byte XBMSP_PACKET_NULL = 10; // no payload protected static final byte XBMSP_PACKET_SETCWD = 11; protected static final byte XBMSP_PACKET_FILELIST_OPEN = 12; // no payload protected static final byte XBMSP_PACKET_FILELIST_READ = 13; protected static final byte XBMSP_PACKET_FILE_INFO = 14; protected static final byte XBMSP_PACKET_FILE_OPEN = 15; protected static final byte XBMSP_PACKET_FILE_READ = 16; protected static final byte XBMSP_PACKET_FILE_SEEK = 17; protected static final byte XBMSP_PACKET_CLOSE = 18; protected static final byte XBMSP_PACKET_CLOSE_ALL = 19; // no payload protected static final byte XBMSP_PACKET_SET_CONFIGURATION_OPTION = 20; protected static final byte XBMSP_PACKET_AUTHENTICATION_INIT = 21; protected static final byte XBMSP_PACKET_AUTHENTICATE = 22; protected static final byte XBMSP_PACKET_UPCWD = 23; /* Packet types (e.g. type field) for Server */ protected static final byte XBMSP_PACKET_OK = 1; protected static final byte XBMSP_PACKET_ERROR = 2; protected static final byte XBMSP_PACKET_HANDLE = 3; protected static final byte XBMSP_PACKET_FILE_DATA = 4; protected static final byte XBMSP_PACKET_FILE_CONTENTS = 5; protected static final byte XBMSP_PACKET_AUTHENTICATION_CONTINUE = 6; /** Packet types (e.g. type field) for Server discovery protocol */ protected static final byte XBMSP_PACKET_SERVER_DISCOVERY_QUERY = 90; protected static final byte XBMSP_PACKET_SERVER_DISCOVERY_REPLY = 91; /* Reponse ERROR CODES */ protected static final byte XBMSP_ERROR_OK = 0; /* Reserved */ protected static final byte XBMSP_ERROR_FAILURE = 1; protected static final byte XBMSP_ERROR_UNSUPPORTED = 2; protected static final byte XBMSP_ERROR_NO_SUCH_FILE = 3; protected static final byte XBMSP_ERROR_INVALID_FILE = 4; protected static final byte XBMSP_ERROR_INVALID_HANDLE = 5; protected static final byte XBMSP_ERROR_OPEN_FAILED = 6; protected static final byte XBMSP_ERROR_TOO_MANY_OPEN_FILES = 7; protected static final byte XBMSP_ERROR_TOO_LONG_READ = 8; protected static final byte XBMSP_ERROR_ILLEGAL_SEEK = 9; protected static final byte XBMSP_ERROR_OPTION_IS_READ_ONLY = 10; protected static final byte XBMSP_ERROR_INVALID_OPTION_VALUE = 11; protected static final byte XBMSP_ERROR_AUTHENTICATION_NEEDED = 12; protected static final byte XBMSP_ERROR_AUTHENTICATION_FAILED = 13; /* seek types for FILE_SEEK */ protected static final byte XBMSP_FILE_SEEK_TYPE_FWDFROMBEG = 0; protected static final byte XBMSP_FILE_SEEK_TYPE_BCKFROMEND = 1; protected static final byte XBMSP_FILE_SEEK_TYPE_FWDFROMCUR = 2; protected static final byte XBMSP_FILE_SEEK_TYPE_BCKFROMCUR = 3; /* Fields within the packet */ /** Message length of msglen field. excludes the length field itself!! */ private int msgLen; /** Message Type of msgType field. */ private byte type; /** * Message ID of the msgID field. msg identifier to keep req / resp insync, * cannot use 0x00000000 OR 0xFFFFFFFF */ private int id; /** complete raw payload of Decoding message */ private ByteBuffer payload; /** complete raw payload of Encoded message */ private ByteBuffer packet; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private String payloadString; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private String payloadString2; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private int payloadInt; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private int payloadInt2; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private long payloadInt64; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private byte payloadByte; /** * payload specific fields: used in the decoding process for the DATA part * of the packet. */ private byte[] payloadData; /* * Static header size in bytes (msglen, TYPE, ID) -- excludes the length * field itself */ private int headerSize = 5; /** debug logger */ private static Logger logger; protected XBMSPEncoderDecoder() { // if (com.superhac.JXBStreamer.Core.Debug.debug) logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); } /** * Call this after the message is ready to be transmitted. * * @return a buffer containing the encoded packet. */ protected ByteBuffer getPacket() { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Packing packet for transmission.."); // calculate the size of the packet if (payload != null) { payload.flip(); this.msgLen = headerSize + payload.remaining(); } else this.msgLen = headerSize; // System.out.println("msglen: "+this.msgLen); // encode the message this.packet = ByteBuffer.allocate(this.msgLen + 4); // + 4 for the // msglen field // header packet.putInt(this.msgLen); packet.put(this.type); packet.putInt(this.id); if (payload != null) packet.put(payload); // flip the buffer packet.flip(); return packet; } /** * Gets the msgID of the packet. (msgID) * * @return msgID */ private int getId() { return id; } /** * Sets the message ID of the packet (msgID) * * @param id */ private void setId(int id) { this.id = id; } /** * Sets the message length of the packet. (msgLen) * * @param msgLen */ private void setMsgLen(int msgLen) { this.msgLen = msgLen; } /** * Returns the packet type (type field) * * @return */ protected byte getType() { return type; } /** * sets the type * * @param type */ private void setType(byte type) { this.type = type; } /** * Takes the socket buffer thats passed in and decodes the message. * * @param buff * the Buffer from the socket. */ protected void decodepacket(ByteBuffer buff) // this should throw an // exception when the packet // cannot be decoded { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Decoding packet.. Socket Buffer size: " + buff.remaining()); /** couldn's match packet type */ // boolean typeNotIdentified = false; // start decoding header this.msgLen = buff.getInt(); this.type = buff.get(); this.id = buff.getInt(); if (this.msgLen == headerSize) // the size of the header only or // greater then packet size return; // theres not payload or the msglen is greater then packet // size! e.g. XBMSP_PACKET_NULL if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Decoding packet.. Socket Buffer size after XBMSP header: " + buff.remaining()); // allocate the payload this.payload = ByteBuffer.allocate(msgLen); // the size while (buff.hasRemaining()) { this.payload.put(buff.get()); } this.payload.flip(); // flip for reading! // start the parsing of the payload switch (this.type) { case XBMSP_PACKET_SETCWD: // change dir if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadString = decodePayloadString(); break; case XBMSP_PACKET_UPCWD: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadInt = decodePayloadInt(); break; case XBMSP_PACKET_FILELIST_READ: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadInt = decodePayloadInt(); break; case XBMSP_PACKET_FILE_INFO: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadString = decodePayloadString(); break; case XBMSP_PACKET_FILE_OPEN: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadString = decodePayloadString(); break; case XBMSP_PACKET_FILE_READ: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadInt = decodePayloadInt(); this.payloadInt2 = decodePayloadInt(); break; case XBMSP_PACKET_FILE_SEEK: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadInt = decodePayloadInt(); this.payloadByte = decodePayloadByte(); this.payloadInt64 = decodePayloadInt64(); break; case XBMSP_PACKET_CLOSE: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadInt = decodePayloadInt(); break; case XBMSP_PACKET_SET_CONFIGURATION_OPTION: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadString = decodePayloadString(); this.payloadString2 = decodePayloadString(); break; case XBMSP_PACKET_AUTHENTICATION_INIT: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadString = decodePayloadString(); break; case XBMSP_PACKET_AUTHENTICATE: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info(""); this.payloadInt = decodePayloadInt(); this.payloadData = decodePayloadData(); break; default: if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Packet not identifed... Hacker? lmfao!"); // typeNotIdentified = true; } // if typeNotIdentified is true throw exception.. TODO! } /** * Decodes a String at the current payload buffer position. * * @return */ private String decodePayloadString() { int stringSize = payload.getInt(); // if its zero then the string is null if (stringSize == 0) return null; byte[] dir = new byte[stringSize]; // get all the string bytes for (int i = 0; i < stringSize; i++) dir[i] = payload.get(); // copy the bytes to a new string! try { return new String(dir, "US-ASCII"); } catch (UnsupportedEncodingException e) { System.out.println("ERROR: " + e); System.exit(1); } return null; } /** * Decodes a Int at the current payload buffer position. * * @return */ private int decodePayloadInt() { return payload.getInt(); } /** * Decodes a Byte at the current payload buffer position. * * @return */ private byte decodePayloadByte() { return payload.get(); } /** * Decodes a Long(64 bits) at the current payload buffer position. * * @return */ private long decodePayloadInt64() { return payload.getLong(); } /** * Decodes a Byte Array at the current payload buffer position for whatever * remains in the buffer. * * @return */ private byte[] decodePayloadData() { byte[] payloadData = new byte[payload.remaining()]; int size = payload.limit(); for (int i = 0; i < size; i++) payloadData[i] = payload.get(); return payloadData; } /** * Encodes a packet OK response to this instance of XBMSPEncoderDecoder. An * encoded message is always based on a message recieved from the client. * Hence we use the orginal XBMSPEncoderDecoder instance of the recieved * message to encode the response. * * @return a new XBMSPEncoderDecoder with the response packet. */ protected XBMSPEncoderDecoder encodePacketOk() { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoded Packet Okay response."); // create a new packet XBMSPEncoderDecoder outgoingPacket = new XBMSPEncoderDecoder(); // set the msg length outgoingPacket.setMsgLen(headerSize); // set the type outgoingPacket.setType(XBMSP_PACKET_OK); // set message ID to the received message ID outgoingPacket.setId(this.getId()); return outgoingPacket; } /** * Encodes a packet ERROR response to this instance of XBMSPEncoderDecoder. * An encoded message is always based on a message recieved from the client. * Hence we use the orginal XBMSPEncoderDecoder instance of the recieved * message to encode the response. * * @param errorCode * the error code as defined by the XBMSP protocol. * @param errorMessage * an optional TEXT message * @return a new XBMSPEncoderDecoder with the response packet. */ protected XBMSPEncoderDecoder encodePacketError(byte errorCode, String errorMessage) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoded Packet Error response. Code:" + errorCode); XBMSPEncoderDecoder outgoingPacket = new XBMSPEncoderDecoder(); ByteBuffer payload = ByteBuffer.allocate(2048); // create a new packet // set the type outgoingPacket.setType(XBMSP_PACKET_ERROR); // set message ID to the received message ID outgoingPacket.setId(this.getId()); // set error code in payload section payload.put(errorCode); // optionally pack an error string. int32 length+string if (errorMessage != null) { // prepend the string length int stringLength = errorMessage.length(); payload.putInt(stringLength); // add string to payload.. Convert string to ACSII bytes try { payload.put(errorMessage.getBytes("US-ASCII")); } catch (UnsupportedEncodingException e) { System.out.println("ERROR: " + e); System.exit(1); } } // set the payload on the outgoing packet outgoingPacket.setPayload(payload); return outgoingPacket; } /** * Encodes a packet PacketHandle response to this instance of * XBMSPEncoderDecoder. An encoded message is always based on a message * recieved from the client. Hence we use the orginal XBMSPEncoderDecoder * instance of the recieved message to encode the response. * * @param handle * the handle number of the file or directory * @return a new XBMSPEncoderDecoder with the response packet. */ protected XBMSPEncoderDecoder encodePacketHandle(int handle) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoded Packet Handle response."); XBMSPEncoderDecoder outgoingPacket = new XBMSPEncoderDecoder(); ByteBuffer payload = ByteBuffer.allocate(100); // only 1 int // create a new packet // set the type outgoingPacket.setType(XBMSP_PACKET_HANDLE); // set message ID to the received message ID outgoingPacket.setId(this.getId()); // set the handle in the payload payload.putInt(handle); // set the payload on the outgoing packet outgoingPacket.setPayload(payload); return outgoingPacket; } /** * Encodes a packet PacketFileData response to this instance of * XBMSPEncoderDecoder. An encoded message is always based on a message * recieved from the client. Hence we use the orginal XBMSPEncoderDecoder * instance of the recieved message to encode the response. * * @param name * The name of the file or handle(file.getName()) * @param data * The XML encoded String with the file data. (e.g. file size, * accessTime, etc..) * @return a new XBMSPEncoderDecoder with the response packet. */ protected XBMSPEncoderDecoder encodePacketFileData(String name, String data) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoded File data response. (XML Data)."); XBMSPEncoderDecoder outgoingPacket = new XBMSPEncoderDecoder(); byte bytes[]; ByteBuffer payload = ByteBuffer.allocate(2000); // create a new packet // set the type outgoingPacket.setType(XBMSP_PACKET_FILE_DATA); // set message ID to the received message ID outgoingPacket.setId(this.getId()); if (name != null && data != null) // a entry { // pack string 1 payload.putInt(name.length()); bytes = name.getBytes(); payload.put(bytes); // pack string 2 payload.putInt(data.length()); bytes = data.getBytes(); payload.put(bytes); } else // the end of the list was hit. set lengths to zero on both // strings { payload.putInt(0x00000000); payload.putInt(0x00000000); } // set the payload on the outgoing packet outgoingPacket.setPayload(payload); return outgoingPacket; } /** * Encodes a packet encodePacketFileContents response to this instance of * XBMSPEncoderDecoder. An encoded message is always based on a message * recieved from the client. Hence we use the orginal XBMSPEncoderDecoder * instance of the recieved message to encode the response. * * @param data * the raw file data for the request * @return a new XBMSPEncoderDecoder with the response packet. */ protected XBMSPEncoderDecoder encodePacketFileContents(ByteBuffer data) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoded File Contents."); XBMSPEncoderDecoder outgoingPacket = new XBMSPEncoderDecoder(); // set the type outgoingPacket.setType(XBMSP_PACKET_FILE_CONTENTS); // set message ID to the received message ID outgoingPacket.setId(this.getId()); if (data != null) { outgoingPacket.setPayload(data); } else // no more data { ByteBuffer payload = ByteBuffer.allocate(4); payload.putInt(0x00000000); outgoingPacket.setPayload(payload); } return outgoingPacket; } /** * Sets the payload of the packet * * @param payload */ private void setPayload(ByteBuffer payload) { this.payload = payload; } /** * Gets the first byte from the payload.. (message data section) * * @return */ protected byte getPayloadByte() { return payloadByte; } /** * Gets the first byte[] from the payload.. (message data section) * * @return */ protected byte[] getPayloadData() { return payloadData; } /** * Gets the first Int from the payload.. (message data section) * * @return */ protected int getPayloadInt() { return payloadInt; } /** * Gets the second Int from the payload.. (message data section) * * @return */ protected int getPayloadInt2() { return payloadInt2; } /** * Gets the first long(INT64) from the payload.. (message data section) * * @return */ protected long getPayloadInt64() { return payloadInt64; } /** * Gets the first String from the payload.. (message data section) * * @return */ protected String getPayloadString() { return payloadString; } /** * Gets the Second String from the payload.. (message data section) * * @return */ protected String getPayloadString2() { return payloadString2; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/DirectoryHandlerObject.java0000700000175000017500000001517310540072762027362 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.File; import java.util.ArrayList; import java.util.logging.Logger; /** * The DirectoryHandlerObject maps directories to handles and provides services * for fulfilling client requests on directories. E.g. get a list of files in a * directory. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class DirectoryHandlerObject { /** The Directory Handle assigned by the XBMSPServerMessageHandler */ private int handle; /** The Directory Path. will be null if it is the Virtual Root */ private File path; /** A list of the files in the directory. */ private ArrayList files = new ArrayList(); /** * the last path seqment of all virtual roots. E.g. the last the directory. * No files! */ private ArrayList virtualRoot = null; /** how many files in directory */ private int totalDirectoryEntries; /** The current Directory listing position were on */ private int directoryListingPosition = 0; /** debug logger */ private static Logger logger; /** If this is a directory handle to the virtual root this is set */ private boolean isVirtualRoot = false; /** * All regular non-Virtual root paths will use this constructor. * * @param handle * the handle assigned to this path. * @param path * the acutal directory path. */ protected DirectoryHandlerObject(int handle, File path) { // if (com.superhac.JXBStreamer.Core.Debug.debug) logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); this.handle = handle; this.path = path; buildDirectoryList(); } /** * Only use this constructor if its the virtual root directory. * * @param handle * handle the handle assigned to this path. * @param virtualRoot * The virtual root File list. */ protected DirectoryHandlerObject(int handle, ArrayList virtualRoot) { logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); this.handle = handle; this.virtualRoot = virtualRoot; this.path = null; isVirtualRoot = true; buildVirtualRootList(); } /** * Builds the list of files(or directories) contained with this directory. * Not to be used for the virtual root. */ private void buildDirectoryList() { // clear out array files.removeAll(files); // get the listing of the current directory File[] children = path.listFiles(); // add some kind of filters a some point... like to remove . files // add each file as FILE to the arraylist for (int i = 0; i < children.length; i++) files.add(children[i]); // set the total number of Directory entries totalDirectoryEntries = files.size(); if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Build directory list. Total Entries:" + totalDirectoryEntries); } /** * Build the directory list for the Virtual Root directory. Only used when * its the virtual root. */ private void buildVirtualRootList() { files.removeAll(files); // File[] files = new File[virtualRoot.size()]; // copy array list files = (ArrayList) virtualRoot.clone(); // set the total number of Directory entries totalDirectoryEntries = files.size(); } /** * Get the handle number for this directory. * * @return The handle number. */ protected int getHandle() { return handle; /** String[0] = name, String[1] = XML Data */ } /** * Gets the next directory item(file) requested by the client. * * @return String[0] is the name of the file, String[1] = contains the XML * data for client response. */ protected String[] getNextEntry() { String[] payloadStrings = new String[2]; /** * if there are no more entries reset the directoryListingPosition back * to 0 and send null strings */ if (directoryListingPosition == totalDirectoryEntries) { payloadStrings[0] = null; payloadStrings[1] = null; // reset position directoryListingPosition = 0; // refresh the list... if there were new files added they will show // up! if (isVirtualRoot) buildVirtualRootList(); else buildDirectoryList(); if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Last directory entry. Reset List.."); return payloadStrings; } // System.out.println("current position in dir: "+ // directoryListingPosition ); if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Reading and packing next directory entry at position: " + directoryListingPosition); File entry = files.get(directoryListingPosition); // build the String Name and the XML Data payload payloadStrings[0] = entry.getName(); // call the XML function for String[1] payloadStrings[1] = XBMSPxmlEncoder.encodeEntry(entry); // increment the current position directoryListingPosition++; return payloadStrings; } /** * Gets the file index number of the named file within the directory. * * @param name * The name of the file * @return the index number of the requested filename. */ protected int getFileIndexNumber(String name) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Getting file index number in directory for file <" + name + "?"); for (int i = 0; i < files.size(); i++) if (files.get(i).getName().compareTo(name) == 0) // matched return i; return -1; /** this needs to throw an exception is the file does not exists */ } /** * Gets a specfic directory item specified by index. * * @param index * The index number of the requested file. Get from * getFileIndexNumber(String name). * @return String[0] is the name of the file, String[1] = contains the XML * data for client response. */ protected String[] getEntryDataByIndex(int index) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Getting entry data(xml) by index..."); String[] payloads = new String[2]; payloads[0] = files.get(index).getName(); payloads[1] = XBMSPxmlEncoder.encodeEntry(files.get(index)); return payloads; } /** * This gets the File Object for the index number requested. * * @param index * The index number of the requested file. Get from * getFileIndexNumber(String name). * @return The file object of the request. */ protected File getFileByIndex(int index) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Get file by index...."); File file = files.get(index); return file; } /** * Gets the path(File) represented by this DirectoryHandlerObject. * * @return The path. */ protected File getPath() { return path; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/XBMSPServer.java0000700000175000017500000002734210540072762025052 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.Iterator; import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.logging.Logger; /** * This is the main class that is used for running a XBMSP server. The server * uses non-blocking socket IO and runs as a thread. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class XBMSPServer implements Runnable { /** * XBMSP server port to listen to for incoming connections. Default setting * is 1400. */ private int port = 1400; /** * The file directories that make up the virtual root directory. The last * part of the path becomes a directory in the virtual root. */ private ArrayList virtualRoot; /** Activates the XBMSP autoDiscovery server if set. */ private boolean autoDiscoveryEnabled = true; /** Activates the server if set. (Binds the port for listening). */ private boolean startServer = false; /** Stops the server while running. */ private boolean stopServer = false; /** is the server runnning? */ private boolean serverRunning = false; /** the Selector for managing the connections. */ private Selector selector; /** The XBMSP discovery portocol server. */ private XBMSPDiscoverServer discoveryServer; /** Contains all the message handlers for each connected client. */ private ArrayList smhList = new ArrayList(); /** debuging logger instance */ private static Logger logger; /** The timer used is polling for inactive clients */ private Timer timer; /** * The amount of nonactivity before the server disconnects a client (in * seconds) */ private int maximumClientIdleTime = 1800; // in seconds (30 minutes) /** * Creates an instance of the XBMSP Server that runs as a thread. The * instance threads itself and does not stop running as a thread until the * virtual machine is terminated. */ public XBMSPServer() { // gets the logger instance logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); // create a new discovery server... discoveryServer = new XBMSPDiscoverServer(port); // Run the server as a thread. It threads itself! Runnable runnable = this; Thread thread = new Thread(runnable); thread.start(); // start the dead client monitor // check for dead clients every 5 seconds timer = new Timer(); timer .scheduleAtFixedRate(new CheckForClientTimeoutsTask(this), 0, 5000); } /** * Main loop of the Server running as a Thread. Comes from impementing * Runnable */ public void run() { while (true) { if (startServer) { if (autoDiscoveryEnabled) discoveryServer.startServer(); serverListeningLoop(); } // take nap for while the server is NOT listening for connection try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * The main socket listening loop. The sockets are bound and messages are * routed. * */ private void serverListeningLoop() { try { // create a selector for geting IO selector = Selector.open(); // create a SSC object ServerSocketChannel ssc = ServerSocketChannel.open(); // configure it for non-blocking IO ssc.configureBlocking(false); // get the ServerSocket from the SSC ServerSocket ss = ssc.socket(); // Bind the Server Socket to a port ss.bind(new InetSocketAddress(port)); // bind to port // register for accepting incomming connections SelectionKey key = ssc.register(selector, SelectionKey.OP_ACCEPT); // buffer for reading ByteBuffer buffer = ByteBuffer.allocate(2048); // if we make it this far the server is running sucessfully serverRunning = true; while (!stopServer) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Waiting for packet..."); // main loop wait for events selector.select(); // we got an event Set skeys = selector.selectedKeys(); Iterator it = skeys.iterator(); while (it.hasNext()) { // get a key SelectionKey rsk = (SelectionKey) it.next(); // A new connection if ((rsk.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { // accept Connection Socket socket = ss.accept(); SocketChannel sc = socket.getChannel(); sc.configureBlocking(false); sc.register(selector, SelectionKey.OP_READ); // socket.setTcpNoDelay(true); // create a new handler object for connection XBMSPServerMessageHandler smh = new XBMSPServerMessageHandler( sc, virtualRoot); // add it to the connections list // synchronize be cause of ServerStatus synchronized (this) { smhList.add(smh); } // send version information String version = XBMSPEncoderDecoder.SERVER_VERSION; ByteBuffer buf = ByteBuffer.wrap(version .getBytes("US-ASCII")); sc.write(buf); if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("New connection created.."); // remove the key.. were done with it // selector.selectedKeys().remove(rsk); it.remove(); } // its a read // route to right handler else if ((rsk.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) { SocketChannel sc = (SocketChannel) rsk.channel(); // remove the key.. were done with it // selector.selectedKeys().remove(rsk); it.remove(); for (int i = 0; i < smhList.size(); i++) { if (sc.equals(smhList.get(i).getSocketChannel())) {// its // a // match buffer.clear(); int numBytesRead = sc.read(buffer); if (numBytesRead == -1) { // No more bytes can be read from the // channel if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client Disconnected"); synchronized (this) { smhList.remove(i); } sc.close(); } else { buffer.flip(); smhList.get(i).IncommingMessage(buffer); } } } } } } key.selector().close(); ssc.close(); synchronized (this) { smhList.removeAll(smhList); } serverRunning = false; stopServer = false; startServer = false; } catch (IOException e) { System.out.println("ERROR: " + e); } } /** * Provides detailed information about each connected client. * * @return The server status object which contains info about each connected * client. */ public ServerStatus getServerStatus() { ArrayList clients = new ArrayList(); for (XBMSPServerMessageHandler smh : smhList) clients.add(smh.getStatus()); return new ServerStatus(serverRunning, clients); } /** * Is the server running. E.g. Listening for incoming connections. * * @return True if the server is awaiting comming connections and false if * not. */ public boolean isServerRunning() { return serverRunning; } /** * Stops the server from accepting connections and also disconnects any * connected clients. * */ public void stopServer() { // stop discovery server if (autoDiscoveryEnabled) discoveryServer.stopServer(); // stop regular server stopServer = true; selector.wakeup(); } /** * Starts the server so it can recieve incoming connections. * */ public void startServer() { startServer = true; } /** * Gets the binding port for the XBMSP server. * * @return The port number the server is listening on. */ public int getPort() { return port; } /** * Set the port number the server will listen on. * * @param port * The port number the server will bind to. */ public void setPort(int port) { if (serverRunning) { stopServer(); this.port = port; while (serverRunning) { // waits until the server stops. Need this to impose a delay // between stopping and starting } startServer(); } else this.port = port; } /** * Is the the XBMSP server configured for the AutoDiscovery Service(UDP)? * Clients can broadcast on port 1400 and the server will respond with * identifying information that can be used to connect to the server. * * @return True if the Discovery Server is running and False if not. */ public boolean isAutoDiscoveryEnabled() { return autoDiscoveryEnabled; } /** * Clients can broadcast on port 1400 and the server will respond with * identifying information that can be used to connect to the server. * * @param autoDiscoveryEnabled * True if it should be enabled and false if not. */ public void setAutoDiscoveryEnabled(boolean autoDiscoveryEnabled) { this.autoDiscoveryEnabled = autoDiscoveryEnabled; } /** * Set the virtual root directory. This allows multiple directories to be * shared that are spread over different paths. The client is presented with * a virtual root directory that consists of the supplied paths as a single * dirctory. * * @param virtualRoot * An arraylist of files that make up the virtual root directory */ public void setVirtualRoot(ArrayList virtualRoot) { this.virtualRoot = virtualRoot; } /** * Returns an ArrayList of the message handlers. The message handlers handle * the communicate between the client and the server. Each connected client * has its own message handler. As a packet comes into the server it is * routed to the appropraite message handler for that client. * * @return The current message handlers for the clients */ protected ArrayList getServerMessageHandlers() { return smhList; } /** * Gets the maximum client idle time before being disconnected by the * server. * * @return The currently set Idle time in seconds. */ protected int getMaximumClientIdleTime() { return maximumClientIdleTime; } /** * Sets the maximum client idle time before being disconnected by the * server. * * @param maximumClientIdleTime * The maximum amount of idle time before the server disconnects * the client. */ protected void setMaximumClientIdleTime(int maximumClientIdleTime) { this.maximumClientIdleTime = maximumClientIdleTime; } } /** * This is a inner class of XBMSPServer that is used to check the idle time of * connected clients. If the time a client has been idle for exceeds the * maximumClientIdleTime then the client is disconnected. Operates by the task * being schduled by a Timer (timer.scheduleAtFixedRate). * * @author sjscott * */ class CheckForClientTimeoutsTask extends TimerTask { int maximumDelay; XBMSPServer caller; CheckForClientTimeoutsTask(XBMSPServer caller) { this.caller = caller; maximumDelay = caller.getMaximumClientIdleTime(); } public void run() { ArrayList clients = caller .getServerMessageHandlers(); ArrayList remove = new ArrayList(); for (XBMSPServerMessageHandler client : clients) if (client.getLastTransmissionDelay() > maximumDelay) remove.add(client); // if any are over the set idel time remove for (int i = 0; i < remove.size(); i++) { synchronized (this) { clients.remove(remove.get(i)); } // close the clients socket! try { remove.get(i).getSocketChannel().close(); } catch (IOException e) { } } } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/.emptyDir0000700000175000017500000000023610540072762023716 0ustar sjscottsjscottThis file was generated by Together to prevent this folder from being deleted during synchronization with the CVS repositiory. Please do not delete this file.JXBStreamer/src/com/com/superhac/JXBStreamer/Core/XBMSPxmlEncoder.java0000700000175000017500000000452510540072762025702 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.logging.Logger; /** * This class handles the encoding of the XML file data in the XBMSP protocol. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class XBMSPxmlEncoder { static private Logger logger; static { // if (com.superhac.JXBStreamer.Core.Debug.debug) logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); } /** * Encodes a file or directory entry info into the XBMSP protocol format. * * @param entry * the file for which the encoded information should be generated * @return the encoded XML */ protected static String encodeEntry(File entry) { String data = null; // Is this a directoy? if (entry.isDirectory()) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoding directory entry in XML.."); data = ""; data += "" + entry.getName() + ""; // data += ""; // data += ""+entry.getName()+""; // data += ""; data += ""; data += "directory"; data += ""; } else // its a file { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Encoding a file entry in XML.."); data = ""; data += "" + entry.getName() + ""; data += ""; data += "" + entry.getName() + ""; data += ""; data += "file"; data += "" + entry.length() + ""; data += ""; data += ""; data += ""; } byte[] convert = data.getBytes(); try { data = new String(convert, "US-ASCII"); } catch (UnsupportedEncodingException e) { System.out.println("ERROR: " + e); System.exit(1); } return data; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/ConnectedClientStatus.java0000700000175000017500000000777410540072762027246 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; /** * Contains connected client status varibles like IP address, transfer rate, * etc... Each client that is connected will be represented by one ConnectedClientStatus * object. A arrayList of these objects will be contained withing a ServerStatus * object. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class ConnectedClientStatus { private String sourceIP; private String clientVersion; private int lastClientCommand; private int openFileHandlers; private int openDirectoryHandlers; private long transferedBytesSec; protected ConnectedClientStatus(String sourceIP, String clientVersion, int lastClientCommand, int openFileHandlers, int openDirectoryHandlers, long transferedBytesSec) { this.sourceIP = sourceIP; this.clientVersion = clientVersion; this.lastClientCommand = lastClientCommand; this.openFileHandlers = openFileHandlers; this.openDirectoryHandlers = openDirectoryHandlers; this.transferedBytesSec = transferedBytesSec; } /** * Get the clients XBMSP Protocol version * * @return The clients XBMSP protocol version. */ public String getClientVersion() { return clientVersion; } /** * Gets the clients last XBMSP command sent to the server. * * @return The last client issued command */ public String getLastClientCommand() { switch (lastClientCommand) { case XBMSPEncoderDecoder.XBMSP_PACKET_SETCWD: // change dir return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_UPCWD: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_FILELIST_READ: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_INFO: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_OPEN: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_READ: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_SEEK: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_CLOSE: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_SET_CONFIGURATION_OPTION: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_AUTHENTICATION_INIT: return ""; case XBMSPEncoderDecoder.XBMSP_PACKET_AUTHENTICATE: return ""; default: return "Unknown Command"; } } /** * The XBMSP protcol uses handles for associating File and Directory names. * This is like a reference number. A client asks for a handle to a file or * a directory and the server provides it one. Any request for services of * the file or directory will use the handle identifier(int). A client can * have many handles opened at once. * * @return The number of open DIRECTORY handlers */ public int getOpenDirectoryHandlers() { return openDirectoryHandlers; } /** * The XBMSP protcol uses handles for associating File and Directory names. * This is like a reference number. A client asks for a handle to a file or * a directory and the server provides it one. Any request for services of * the file or directory will use the handle identifier(int). A client can * have many handles opened at once. * * @return The number of open File handlers */ public int getOpenFileHandlers() { return openFileHandlers; } /** * Gets the source IP address of the client. * * @return The source IP address of the client. */ public String getSourceIP() { return sourceIP; } /** * Gets the number of bytes transfered per second. If a client is streaming * content this will return the rate at which the server is streaming it. * (BYTES per second) If you want KB then divide the numner by 1000..... * * @return The number of BYTES transfered per second. */ public long getTransferedBytesSec() { return transferedBytesSec; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/XBMSPDiscoverServer.java0000700000175000017500000001150310540072762026541 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; import java.net.UnknownHostException; import java.nio.ByteBuffer; /** * This class handles the server socket connections for the XBMSP Discovery * protocol. By default it listens on port 1400 for UDP requests. The server * responds with connection information for connecting to the XBMSPServer * instance. This runs as a thread started by itself. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class XBMSPDiscoverServer extends Thread { private int port = 1400; private String serverIP; private DatagramSocket socket; private boolean running = false; private boolean stopThread = false; /** * Create an instance of the server * * @param port * The port the server should listen on. */ protected XBMSPDiscoverServer(int port) { this.port = port; // get the local ip address serverIP = InternalIPFinder.getLocalIPAddress(); Thread thread = this; thread.start(); } public void run() { while (!stopThread) { if (running) initServer(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block // e.printStackTrace(); } } } /** * Start the server. * */ public void startServer() { if (!running) running = true; } /** * Stop the server * */ protected void stopServer() { running = false; socket.close(); } /** * Terminate the thread. If done this instance of XBMSPDiscoverServer should * be destoryed. * */ protected void stopThread() { stopThread = true; running = false; socket.close(); } /** * Main loop of the server * */ private void initServer() { try { System.out.println("Server started..."); DatagramPacket packet = new DatagramPacket(new byte[512], 512); socket = new DatagramSocket(null); // socket.setReuseAddress(true); socket.bind(new InetSocketAddress(port)); while (running) { socket.receive(packet); process(packet); } // socket.send(packet); } catch (SocketException e) { // TODO Auto-generated catch block // e.printStackTrace(); running = false; } catch (IOException e) { // TODO Auto-generated catch block // e.printStackTrace(); running = false; } running = false; } /** * Decodes incoming XBMSP Discovery protocol message. * * @param packet * The datagram packet that was received. */ private void process(DatagramPacket packet) { ByteBuffer buffer = ByteBuffer.allocate(1500); buffer.put(packet.getData()); buffer.flip(); // flip for reading int size = buffer.getInt(); byte type = buffer.get(); int messageID = buffer.getInt(); int clientVersionSize = buffer.getInt(); byte[] string = new byte[clientVersionSize]; for (int i = 0; i < clientVersionSize; i++) string[i] = buffer.get(); //String clientVersion = new String(string, 0, string.length); // System.out.println("Client Version: "+ clientVersion); // reset for reuse buffer.clear(); // pack a response int lengthOfServerVersion = XBMSPEncoderDecoder.SERVER_VERSION.length(); int lengthOfServerIP = serverIP.length(); int lengthOfPort = String.valueOf(port).length(); int serverComment = 0; int typeSize = 1; int messageSize = typeSize + 4 + lengthOfServerIP + lengthOfPort + lengthOfServerVersion + serverComment + 16; // +4 for // messageID & // +16 for each // string size // field that is // packed // System.out.println("mss size:" + messageSize); buffer.putInt(messageSize); buffer.put(XBMSPEncoderDecoder.XBMSP_PACKET_SERVER_DISCOVERY_REPLY); buffer.putInt(messageID); buffer.putInt(lengthOfServerIP); buffer.put(serverIP.getBytes()); buffer.putInt(lengthOfPort); buffer.put(String.valueOf(port).getBytes()); buffer.putInt(lengthOfServerVersion); buffer.put(XBMSPEncoderDecoder.SERVER_VERSION.getBytes()); buffer.putInt(serverComment); buffer.flip(); byte data[] = new byte[buffer.remaining()]; buffer.get(data); try { socket.send(new DatagramPacket(data, data.length, packet .getAddress(), packet.getPort())); // socket.send(packet); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Set the port number of the server * * @param port * the port number the server should listen on for the UDP * requests. */ protected void setPort(int port) { this.port = port; } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/Debug.java0000700000175000017500000000114710540072762024013 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.util.logging.Logger; /** * This is a static class. Used get a global logger for all debug messages. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class Debug { /** Sets the global debug logging to be enabled.... */ public static boolean debug = false; /** * Get the logger for the entire package. * @return The logger */ public static Logger getLogger() { return Logger.getLogger("com.superhac.JXBStreamer.Core"); } } JXBStreamer/src/com/com/superhac/JXBStreamer/Core/XBMSPServerMessageHandler.java0000700000175000017500000005260110540072762027651 0ustar sjscottsjscottpackage com.superhac.JXBStreamer.Core; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.logging.Logger; /** * Handles all the messaging for client communication with the server. *

*

* More information can be found at Superhac.com * * @author Steven Scott (superhac007@gmail.com) */ public class XBMSPServerMessageHandler { /** * the currentPath where the client is sitting in the file system. Will be * null for the Virtual Root */ private File currentPath; /** All the Directory Handlers for this client * */ private ArrayList directoryHandlers = new ArrayList(); /** all the file handlers for this client */ private ArrayList fileHandlers = new ArrayList(); /** the directorys that make up the virtual root */ private ArrayList virtualRoot; /** a state var for checking if the client is at the virtual root * */ private boolean atVirtualRoot = true; /** the socket channel for the client */ private SocketChannel sc; /** * The directory handler counter.. Handles the numbering of the handles. * Always points at the next avaiable handler number */ private int directoryNextHandlerCount = 0; /** * The file handler counter.. Handles the numbering of the handles. Always * points at the next avaiable handler number */ private int fileNextHandlerCount = 10000;// start these at 10k /** * a state varible for marking this a new connection. Used in sending the * initial server response messages for new connections. */ private boolean newConnection = true; /** The connected clients software version */ private String clientVersion = "Not Set"; /** the last command the client sent to the server */ private int lastClientCommand = 0; /** debug logger */ private static Logger logger; /** * last time the client transmitted a message to the server. used in check * for in active clients. */ private long lastTransmissionTime; /** * * @param sc * The socket channel for this client * @param virtualRoot * the shared directorys for the virtual roots. */ protected XBMSPServerMessageHandler(SocketChannel sc, ArrayList virtualRoot) { this.currentPath = null; this.sc = sc; this.virtualRoot = virtualRoot; // setup logger logger = com.superhac.JXBStreamer.Core.Debug.getLogger(); } /** * Processes the incoming messages * * @param message * the buffer from socket. */ protected void IncommingMessage(ByteBuffer message) { // catch if we dropped the connection if (message.remaining() == 0) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Message is empty... Probably disconnected client."); return; } // update the last transmission time lastTransmissionTime = System.currentTimeMillis(); if (newConnection) // first packet is the version info { byte[] version = new byte[message.remaining()]; int i = 0; for (i = 0; i < version.length; i++) { version[i] = message.get(); if (version[i] == (char) 0x0A) // LF break; } clientVersion = new String(version, 0, i - 1); // string the // captured bytes - // the LF if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("New connection XBMSP client version packet. Client Version: " + clientVersion); newConnection = false; } /** * Sometimes the buffer is returned with 2 packets in one buffer. * When this occurs we just process the rest of buffer. */ while (message.hasRemaining()) { XBMSPEncoderDecoder packet = new XBMSPEncoderDecoder(); packet.decodepacket(message); handleMessage(packet); //System.out.println("More data? "+message.hasRemaining()); } } /** * Gets the socket channel that assigned to this message handler. * * @return the socket channel */ protected SocketChannel getSocketChannel() { return sc; } /** * Handles the message routing and the response to be sent to the client. * Uses the socket channel to transmit the response packet. * * @param decodedMessage * the decoded message */ private void handleMessage(XBMSPEncoderDecoder decodedMessage) { XBMSPEncoderDecoder response = null; boolean error = false; if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Routing decoded packet by type: Type: " + decodedMessage.getType()); lastClientCommand = decodedMessage.getType(); switch (decodedMessage.getType()) { /* server sends packet okay message */ case XBMSPEncoderDecoder.XBMSP_PACKET_NULL: response = decodedMessage.encodePacketOk(); break; case XBMSPEncoderDecoder.XBMSP_PACKET_SETCWD: error = changeDir(decodedMessage.getPayloadString()); if (error) response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_FAILURE, "Invalid Directory Change"); else response = decodedMessage.encodePacketOk(); break; case XBMSPEncoderDecoder.XBMSP_PACKET_UPCWD: error = upDirectory(decodedMessage.getPayloadInt()); if (error) response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_FAILURE, "Invalid Directory Change"); else response = decodedMessage.encodePacketOk(); break; case XBMSPEncoderDecoder.XBMSP_PACKET_FILELIST_OPEN: int handle = getDirectoryHandle(); response = decodedMessage.encodePacketHandle(handle); break; case XBMSPEncoderDecoder.XBMSP_PACKET_FILELIST_READ: DirectoryHandlerObject handleObject = getDirectoryHandle(decodedMessage .getPayloadInt()); if (handleObject == null)// invalid! response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_INVALID_HANDLE, "Invalid Handle"); else { String[] strings = handleObject.getNextEntry(); response = decodedMessage.encodePacketFileData(strings[0], strings[1]); } break; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_INFO: DirectoryHandlerObject dho = getCWDDirectoryHandler(); if (dho != null) { int index = dho.getFileIndexNumber(decodedMessage .getPayloadString()); if (index != -1) // file not found in directory { String[] strings = dho.getEntryDataByIndex(index); response = decodedMessage.encodePacketFileData(strings[0], strings[1]); } else { response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_NO_SUCH_FILE, "No such File..."); } } else response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_NO_SUCH_FILE, "No such File.."); break; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_OPEN: DirectoryHandlerObject dho2 = getCWDDirectoryHandler(); if (dho2 != null) { int index = dho2.getFileIndexNumber(decodedMessage .getPayloadString()); if (index == -1) // invalid file handler response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_INVALID_HANDLE, "Invalid Handle"); else { File file = dho2.getFileByIndex(index); int handle2 = getFileHandle(file); response = decodedMessage.encodePacketHandle(handle2); } } else response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_NO_SUCH_FILE, "No such File or Directory"); break; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_READ: FileHandlerObject fho = getFileHandler(decodedMessage .getPayloadInt()); if (fho != null) { response = decodedMessage.encodePacketFileContents(fho .read(decodedMessage.getPayloadInt2())); } else { response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_INVALID_HANDLE, "Invalid Handle"); } break; case XBMSPEncoderDecoder.XBMSP_PACKET_FILE_SEEK: FileHandlerObject fho2 = getFileHandler(decodedMessage .getPayloadInt()); if (fho2 != null) { boolean error2 = fho2.seekFile( decodedMessage.getPayloadInt64(), decodedMessage .getPayloadByte()); if (!error2) // seek was good response = decodedMessage.encodePacketOk(); else // seek was bad response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_ILLEGAL_SEEK, "Illegal Seek!"); } else { response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_INVALID_HANDLE, "Invalid Handle"); } break; case XBMSPEncoderDecoder.XBMSP_PACKET_CLOSE: if (closeHandle(decodedMessage.getPayloadInt())) // removed! response = decodedMessage.encodePacketOk(); else response = decodedMessage.encodePacketError( XBMSPEncoderDecoder.XBMSP_ERROR_INVALID_HANDLE, "Invalid Handle"); break; case XBMSPEncoderDecoder.XBMSP_PACKET_CLOSE_ALL: closeAllHandles(); response = decodedMessage.encodePacketOk(); break; } // send the message out if not errored...or response is null if (response != null) try { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Sending response packet.."); // get the bytebuffer that contains the packet ByteBuffer buf = response.getPacket(); /** * This you have to do because the bytebuffer you put in my not * be fully writen to socket. THis will keep looping until it * has been comepletly written out. *** HACK LESSON*** */ while (buf.hasRemaining()) sc.write(buf); } catch (IOException e) { System.out.println("ERROR: " + e); } } /** * Handles the client's request for changing directories * * @param newDirectory * the directory that the currentPath should be changed to. * @return true if error occured and false if not */ private boolean changeDir(String newDirectory) { boolean error = false; boolean matched = false; // check for all the symbolic directory moves if (newDirectory == null) // just keep the same currentPath { if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Client requested directory change of null. Directory not changed."); matched = true; return error; } else if (newDirectory.startsWith("/", 0)) // set current path to root // path { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client requested directory change to : <" + newDirectory + ">."); atVirtualRoot = true; currentPath = null; return false; } else if (newDirectory.startsWith("..", 0)) // move up 1 level { // if were already at root... stay at root if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client requested directory change to : <" + newDirectory + ">."); if (atVirtualRoot) { return true; } else // move one directory up { System.out.println("Move up .. ran"); File currentPathTemp = new File(currentPath.getParent()); for (File root : virtualRoot) { // parent of the virtual root File parent = new File(root.getParent()); if (parent.getAbsolutePath().compareTo( currentPathTemp.getAbsolutePath()) == 0) { atVirtualRoot = true; currentPath = null; break; } currentPath = currentPathTemp; } return false; } } if (atVirtualRoot) { for (File path : virtualRoot) { if ((path.getName().compareTo(newDirectory)) == 0) { currentPath = new File(path.getAbsolutePath()); atVirtualRoot = false; matched = true; break; } } } else { // get the listing of the current directory String[] children = currentPath.list(); // check the current directory for a matching directory for (int i = 0; i < children.length; i++) { if (children[i].compareTo(newDirectory) == 0) { String newPath = currentPath + "/" + newDirectory; if (new File(newPath).isDirectory()) { currentPath = new File(newPath); // set the new path // to // the currentpath atVirtualRoot = false; if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Client requested directory change to : <" + newDirectory + ">."); matched = true; break; } } } } if (!matched) // we did not match the newDirectory in the current path error = true; if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("ERROR: Client requested directory change to : <" + newDirectory + ">."); return error; } /** * Handles directory changes UP from currentPath by a number to move. * * @param count * the number of directories to move UP * @return true if successfull and false if not. */ private boolean upDirectory(int count) { // this needs to take into account the virutal ROOT! FIXME if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client requested directory change up " + count + " levels."); boolean error = false; if (count == 0) // nop operation return false; else if (count == 0xFFFFFFFF) // move to root { currentPath = null; atVirtualRoot = true; return false; } // for all other numbers for (int i = 0; i < count; i++) { // were at root and the count is still greater... ERROR! if (atVirtualRoot) return true; File currentPathTemp = new File(currentPath.getParent()); for (File root : virtualRoot) { // parent of the virtual root File parent = new File(root.getParent()); if (parent.getAbsolutePath().compareTo( currentPathTemp.getAbsolutePath()) == 0) { atVirtualRoot = true; currentPath = null; break; } currentPath = currentPathTemp; } // compare new directoy to virutal root } return error; } /** * Handle client requests for a Directory handle. * * @return a handle */ private int getDirectoryHandle() { // if (com.superhac.JXBStreamer.Core.Debug.debug) // logger.info("Getting directory handle for <" // + currentPath.getAbsolutePath() + ">"); int handle = 0; boolean match = false; // Check if handler already exists if (atVirtualRoot) { for (int i = 0; i < directoryHandlers.size(); i++) { if (directoryHandlers.get(i).getPath() == null) { handle = directoryHandlers.get(i).getHandle(); match = true; if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Directory handler already created.. Returning the handler."); } } } else { for (int i = 0; i < directoryHandlers.size(); i++) { if (directoryHandlers.get(i).getPath() != null) if (directoryHandlers.get(i).getPath().getName().compareTo( currentPath.getName()) == 0) { handle = directoryHandlers.get(i).getHandle(); match = true; if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Directory handler already created.. Returning the handler."); } } } // handle does not exisit create a new handlerObject if (!match) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Directoy handler does not exist.. Creating one.."); // create it if (atVirtualRoot) { DirectoryHandlerObject dirHandler = new DirectoryHandlerObject( directoryNextHandlerCount, virtualRoot); handle = dirHandler.getHandle(); directoryHandlers.add(dirHandler); // increment handlerCount directoryNextHandlerCount++; } else { DirectoryHandlerObject dirHandler = new DirectoryHandlerObject( directoryNextHandlerCount, currentPath); handle = dirHandler.getHandle(); directoryHandlers.add(dirHandler); // increment handlerCount directoryNextHandlerCount++; } } return handle; } /** * Handle client requests for a file handle. * * @param file * the File object for the requested handle. * @return a handle */ private int getFileHandle(File file) { int handle = 0; boolean match = false; if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Get File handler for <" + file.getName() + ">."); // Check if handler already exists for (int i = 0; i < fileHandlers.size(); i++) { if (fileHandlers.get(i).getFileName().compareTo(file.getName()) == 0) { handle = fileHandlers.get(i).getHandle(); match = true; if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("File handler exist.. returning it."); } } // handle does not exisit create a new handlerObject if (!match) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("File handler does not exist.. Creating one." + " Handler #:" + fileNextHandlerCount); // create it FileHandlerObject fileHandler = new FileHandlerObject( fileNextHandlerCount, file); handle = fileHandler.getHandle(); fileHandlers.add(fileHandler); // increment handlerCount fileNextHandlerCount++; } return handle; } /** * gets the current working DirectoryHandlerObject. e.g. currentPath. * * @return the DirectoryHandlerObject for the currentPath */ private DirectoryHandlerObject getCWDDirectoryHandler() { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Geting CWD handler..."); // just in case a handle to the current dir was not created. // XBMC does this without doing a change dir first on a new // connection... getDirectoryHandle(); if (atVirtualRoot) { // match handle to virtual handle for (int i = 0; i < directoryHandlers.size(); i++) { // matched to a file to the virtual root if (directoryHandlers.get(i).getPath() == null) return directoryHandlers.get(i); } } else { // match handle to known handler for (int i = 0; i < directoryHandlers.size(); i++) { // the virutal root with have a path of null... we skip it if (directoryHandlers.get(i).getPath() != null) // matched to a file in the currentpath if (directoryHandlers.get(i).getPath().getName().compareTo( currentPath.getName()) == 0) return directoryHandlers.get(i); } } if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("ERROR: Can't find working directory handler. Should not happen!"); return null; } /** * Gets the DirectoryHandlerObject for the specified handle. * * @param handle * the handle for the directory * @return DirectoryHandlerObject of the requested handle. */ private DirectoryHandlerObject getDirectoryHandle(int handle) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client directory read for handle #: " + handle); // match handle to known handler for (int i = 0; i < directoryHandlers.size(); i++) { if (directoryHandlers.get(i).getHandle() == handle) return directoryHandlers.get(i); } return null; // this is an invalid handle! } /** * Gets the FileHandlerObject for the specified handle * * @param handle * the handle number * @return FileHandlerObject for the specified handle */ private FileHandlerObject getFileHandler(int handle) { // check for matching handle! // match handle to known handler for (int i = 0; i < fileHandlers.size(); i++) { if (fileHandlers.get(i).getHandle() == handle) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client file read for handle #: " + handle + " filename:" + fileHandlers.get(i).getFileName()); return fileHandlers.get(i); } } if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client file read for handle #: " + handle + " is invalid!"); return null; // this is an invalid handle! } /** * Used when a client wants to close a handle. * * @param handle * the handle to be closed. * @return true if good, false if failed. */ private boolean closeHandle(int handle) { if (com.superhac.JXBStreamer.Core.Debug.debug) logger .info("Client request handle #: " + handle + " to be closed."); // match File handle to known handler for (int i = 0; i < fileHandlers.size(); i++) { if (fileHandlers.get(i).getHandle() == handle) { fileHandlers.remove(i); return true; } } // match Directory handle to known handler for (int i = 0; i < directoryHandlers.size(); i++) { if (directoryHandlers.get(i).getHandle() == handle) { directoryHandlers.remove(i); return true; } } return false; // could not match! } /** * Closes all open handles * * @return true if good, false if failed. */ private boolean closeAllHandles() { if (com.superhac.JXBStreamer.Core.Debug.debug) logger.info("Client requested all handles" + " to be closed.."); fileHandlers.removeAll(fileHandlers); directoryHandlers.removeAll(directoryHandlers); return true; } /** * Gets the clients status for this message handler. * * @return a ConnectedClientStatus */ public ConnectedClientStatus getStatus() { return new ConnectedClientStatus(sc.socket().getRemoteSocketAddress() .toString(), clientVersion, lastClientCommand, fileHandlers .size(), directoryHandlers.size(), getFileTransferRates()); } /** * Gets the file transfer rates for all open FileHandler objects. * * @return the total number of bytes per second transfered. */ private long getFileTransferRates() { long fileTransferRate = 0; for (FileHandlerObject file : fileHandlers) fileTransferRate += file.getFileTransferRate(); return fileTransferRate; } /** * Gets the number of seconds since client last sent a message. * * @return the number of seconds since the client sent a message. */ protected long getLastTransmissionDelay() { // in seconds! long delay = (System.currentTimeMillis() - lastTransmissionTime) / 1000; return delay; } } JXBStreamer/dist/jxbdocs.tar0000700000175000017500000324400010535637644016270 0ustar sjscottsjscottjavadoc/0000755000175000017500000000000010535374265012443 5ustar sjscottsjscottjavadoc/com/0000755000175000017500000000000010535374264013220 5ustar sjscottsjscottjavadoc/com/superhac/0000755000175000017500000000000010535374264015032 5ustar sjscottsjscottjavadoc/com/superhac/JXBStreamer/0000755000175000017500000000000010535374265017161 5ustar sjscottsjscottjavadoc/com/superhac/JXBStreamer/Core/0000755000175000017500000000000010535374265020051 5ustar sjscottsjscottjavadoc/com/superhac/JXBStreamer/Core/ConnectedClientStatus.html0000644000175000017500000003602710535374264025213 0ustar sjscottsjscott ConnectedClientStatus


com.superhac.JXBStreamer.Core
Class ConnectedClientStatus

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.ConnectedClientStatus

public class ConnectedClientStatus
extends java.lang.Object

Contains connected client status varibles like IP address, transfer rate, etc... Each client that is connected will be represented by one ConnectedClientStatus object. A arrayList of these objects will be contained withing a ServerStatus object.

More information can be found at Superhac.com


Constructor Summary
protected ConnectedClientStatus(java.lang.String sourceIP, java.lang.String clientVersion, int lastClientCommand, int openFileHandlers, int openDirectoryHandlers, long transferedBytesSec)
           
 
Method Summary
 java.lang.String getClientVersion()
          Get the clients XBMSP Protocol version
 java.lang.String getLastClientCommand()
          Gets the clients last XBMSP command sent to the server.
 int getOpenDirectoryHandlers()
          The XBMSP protcol uses handles for associating File and Directory names.
 int getOpenFileHandlers()
          The XBMSP protcol uses handles for associating File and Directory names.
 java.lang.String getSourceIP()
          Gets the source IP address of the client.
 long getTransferedBytesSec()
          Gets the number of bytes transfered per second.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConnectedClientStatus

protected ConnectedClientStatus(java.lang.String sourceIP,
                                java.lang.String clientVersion,
                                int lastClientCommand,
                                int openFileHandlers,
                                int openDirectoryHandlers,
                                long transferedBytesSec)
Method Detail

getClientVersion

public java.lang.String getClientVersion()
Get the clients XBMSP Protocol version

Returns:
The clients XBMSP protocol version.

getLastClientCommand

public java.lang.String getLastClientCommand()
Gets the clients last XBMSP command sent to the server.

Returns:
The last client issued command

getOpenDirectoryHandlers

public int getOpenDirectoryHandlers()
The XBMSP protcol uses handles for associating File and Directory names. This is like a reference number. A client asks for a handle to a file or a directory and the server provides it one. Any request for services of the file or directory will use the handle identifier(int). A client can have many handles opened at once.

Returns:
The number of open DIRECTORY handlers

getOpenFileHandlers

public int getOpenFileHandlers()
The XBMSP protcol uses handles for associating File and Directory names. This is like a reference number. A client asks for a handle to a file or a directory and the server provides it one. Any request for services of the file or directory will use the handle identifier(int). A client can have many handles opened at once.

Returns:
The number of open File handlers

getSourceIP

public java.lang.String getSourceIP()
Gets the source IP address of the client.

Returns:
The source IP address of the client.

getTransferedBytesSec

public long getTransferedBytesSec()
Gets the number of bytes transfered per second. If a client is streaming content this will return the rate at which the server is streaming it. (BYTES per second) If you want KB then divide the numner by 1000.....

Returns:
The number of BYTES transfered per second.


javadoc/com/superhac/JXBStreamer/Core/Debug.html0000644000175000017500000002605210535374264021771 0ustar sjscottsjscott Debug

com.superhac.JXBStreamer.Core
Class Debug

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.Debug

public class Debug
extends java.lang.Object

This is a static class. Used get a global logger for all debug messages.

More information can be found at Superhac.com


Field Summary
static boolean debug
          Sets the global debug logging to be enabled....
 
Constructor Summary
Debug()
           
 
Method Summary
static java.util.logging.Logger getLogger()
          Get the logger for the entire package.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debug

public static boolean debug
Sets the global debug logging to be enabled....

Constructor Detail

Debug

public Debug()
Method Detail

getLogger

public static java.util.logging.Logger getLogger()
Get the logger for the entire package.

Returns:
The logger


javadoc/com/superhac/JXBStreamer/Core/DirectoryHandlerObject.html0000644000175000017500000003750510535374264025341 0ustar sjscottsjscott DirectoryHandlerObject

com.superhac.JXBStreamer.Core
Class DirectoryHandlerObject

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.DirectoryHandlerObject

public class DirectoryHandlerObject
extends java.lang.Object

The DirectoryHandlerObject maps directories to handles and provides services for fulfilling client requests on directories. E.g. get a list of files in a directory.

More information can be found at Superhac.com


Constructor Summary
protected DirectoryHandlerObject(int handle, java.util.ArrayList<java.io.File> virtualRoot)
          Only use this constructor if its the virtual root directory.
protected DirectoryHandlerObject(int handle, java.io.File path)
          All regular non-Virtual root paths will use this constructor.
 
Method Summary
protected  java.lang.String[] getEntryDataByIndex(int index)
          Gets a specfic directory item specified by index.
protected  java.io.File getFileByIndex(int index)
          This gets the File Object for the index number requested.
protected  int getFileIndexNumber(java.lang.String name)
          Gets the file index number of the named file within the directory.
protected  int getHandle()
          Get the handle number for this directory.
protected  java.lang.String[] getNextEntry()
          Gets the next directory item(file) requested by the client.
protected  java.io.File getPath()
          Gets the path(File) represented by this DirectoryHandlerObject.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DirectoryHandlerObject

protected DirectoryHandlerObject(int handle,
                                 java.io.File path)
All regular non-Virtual root paths will use this constructor.

Parameters:
handle - the handle assigned to this path.
path - the acutal directory path.

DirectoryHandlerObject

protected DirectoryHandlerObject(int handle,
                                 java.util.ArrayList<java.io.File> virtualRoot)
Only use this constructor if its the virtual root directory.

Parameters:
handle - handle the handle assigned to this path.
virtualRoot - The virtual root File list.
Method Detail

getHandle

protected int getHandle()
Get the handle number for this directory.

Returns:
The handle number.

getNextEntry

protected java.lang.String[] getNextEntry()
Gets the next directory item(file) requested by the client.

Returns:
String[0] is the name of the file, String[1] = contains the XML data for client response.

getFileIndexNumber

protected int getFileIndexNumber(java.lang.String name)
Gets the file index number of the named file within the directory.

Parameters:
name - The name of the file
Returns:
the index number of the requested filename.

getEntryDataByIndex

protected java.lang.String[] getEntryDataByIndex(int index)
Gets a specfic directory item specified by index.

Parameters:
index - The index number of the requested file. Get from getFileIndexNumber(String name).
Returns:
String[0] is the name of the file, String[1] = contains the XML data for client response.

getFileByIndex

protected java.io.File getFileByIndex(int index)
This gets the File Object for the index number requested.

Parameters:
index - The index number of the requested file. Get from getFileIndexNumber(String name).
Returns:
The file object of the request.

getPath

protected java.io.File getPath()
Gets the path(File) represented by this DirectoryHandlerObject.

Returns:
The path.


javadoc/com/superhac/JXBStreamer/Core/FileHandlerObject.html0000644000175000017500000003420610535374264024247 0ustar sjscottsjscott FileHandlerObject

com.superhac.JXBStreamer.Core
Class FileHandlerObject

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.FileHandlerObject

public class FileHandlerObject
extends java.lang.Object

The FileHandlerObject maps Files to handles and provides services for fulfilling client requests on Files. E.g. get file data.

More information can be found at Superhac.com


Constructor Summary
protected FileHandlerObject(int handle, java.io.File file)
           
 
Method Summary
protected  java.io.File getFile()
          Gets the File object of the file represented by FileHandleObject
protected  java.lang.String getFileName()
          Get the file name represented by FileHandleObject
protected  long getFileTransferRate()
          Gets the file transfer rate in seconds.
protected  int getHandle()
          Gets the handle number
protected  java.nio.ByteBuffer read(int numberOfBytes)
          Read a number of bytes from file
protected  boolean seekFile(long offset, byte seekType)
          Seek to a location withing the file...
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileHandlerObject

protected FileHandlerObject(int handle,
                            java.io.File file)
Method Detail

read

protected java.nio.ByteBuffer read(int numberOfBytes)
Read a number of bytes from file

Parameters:
numberOfBytes - the number of bytes to read
Returns:
A bytebuffer containing the read bytes.

seekFile

protected boolean seekFile(long offset,
                           byte seekType)
Seek to a location withing the file...

Parameters:
offset - an amount to seek from the SeekType
seekType - (0 = forward from the beginning of the file, 1 = backward from the end of the file, 2 = forward from the current position, 3 = backwards from the current position)
Returns:
True if its a success or false if not.

getFileName

protected java.lang.String getFileName()
Get the file name represented by FileHandleObject

Returns:
filename

getFile

protected java.io.File getFile()
Gets the File object of the file represented by FileHandleObject

Returns:
the File object

getHandle

protected int getHandle()
Gets the handle number

Returns:
handle number

getFileTransferRate

protected long getFileTransferRate()
Gets the file transfer rate in seconds. Based on the creation time of the object , the current system time and the number of bytes transfered. E.g. reads.

Returns:
The number of bytes per second transfered.


javadoc/com/superhac/JXBStreamer/Core/InternalIPFinder.html0000644000175000017500000002357410535374265024107 0ustar sjscottsjscott InternalIPFinder

com.superhac.JXBStreamer.Core
Class InternalIPFinder

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.InternalIPFinder

public class InternalIPFinder
extends java.lang.Object

A static class for getting the servers own binding IP address.


Constructor Summary
InternalIPFinder()
          Creates a new instance of InternalIPFinder
 
Method Summary
static java.lang.String getLocalIPAddress()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InternalIPFinder

public InternalIPFinder()
Creates a new instance of InternalIPFinder

Method Detail

getLocalIPAddress

public static java.lang.String getLocalIPAddress()


javadoc/com/superhac/JXBStreamer/Core/ServerStatus.html0000644000175000017500000002703310535374265023416 0ustar sjscottsjscott ServerStatus

com.superhac.JXBStreamer.Core
Class ServerStatus

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.ServerStatus

public class ServerStatus
extends java.lang.Object

This object is used to get the status of the server and the connected clients status...


Constructor Summary
protected ServerStatus(boolean isServerRunning, java.util.ArrayList<ConnectedClientStatus> clients)
           
 
Method Summary
 java.util.ArrayList<ConnectedClientStatus> getClients()
          Gets the list of ConnectedClientStatus objects
 boolean isServerRunning()
          Is the serverRunning?
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ServerStatus

protected ServerStatus(boolean isServerRunning,
                       java.util.ArrayList<ConnectedClientStatus> clients)
Parameters:
isServerRunning - Set if the server is running...
A - list of ConnectedClientStatus objects
Method Detail

getClients

public java.util.ArrayList<ConnectedClientStatus> getClients()
Gets the list of ConnectedClientStatus objects

Returns:
ConnectedClientStatus objects

isServerRunning

public boolean isServerRunning()
Is the serverRunning?

Returns:
True = yes, false = no;


javadoc/com/superhac/JXBStreamer/Core/XBMSPDiscoverServer.html0000644000175000017500000003713610535374265024530 0ustar sjscottsjscott XBMSPDiscoverServer

com.superhac.JXBStreamer.Core
Class XBMSPDiscoverServer

java.lang.Object
  extended by java.lang.Thread
      extended by com.superhac.JXBStreamer.Core.XBMSPDiscoverServer
All Implemented Interfaces:
java.lang.Runnable

public class XBMSPDiscoverServer
extends java.lang.Thread

This class handles the server socket connections for the XBMSP Discovery protocol. By default it listens on port 1400 for UDP requests. The server responds with connection information for connecting to the XBMSPServer instance. This runs as a thread started by itself.

More information can be found at Superhac.com


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
protected XBMSPDiscoverServer(int port)
          Create an instance of the server
 
Method Summary
 void run()
           
protected  void setPort(int port)
          Set the port number of the server
 void startServer()
          Start the server.
protected  void stopServer()
          Stop the server
protected  void stopThread()
          Terminate the thread.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

XBMSPDiscoverServer

protected XBMSPDiscoverServer(int port)
Create an instance of the server

Parameters:
port - The port the server should listen on.
Method Detail

run

public void run()
Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread

startServer

public void startServer()
Start the server.


stopServer

protected void stopServer()
Stop the server


stopThread

protected void stopThread()
Terminate the thread. If done this instance of XBMSPDiscoverServer should be destoryed.


setPort

protected void setPort(int port)
Set the port number of the server

Parameters:
port - the port number the server should listen on for the UDP requests.


javadoc/com/superhac/JXBStreamer/Core/XBMSPEncoderDecoder.html0000644000175000017500000015441510535374265024430 0ustar sjscottsjscott XBMSPEncoderDecoder

com.superhac.JXBStreamer.Core
Class XBMSPEncoderDecoder

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.XBMSPEncoderDecoder

public class XBMSPEncoderDecoder
extends java.lang.Object

This handles all the XMBSP packet Decoding and Encoding. This is used by the XBMSPServerMessageHandler's to decode and code messages.

The protocol is documented here.

More information can be found at Superhac.com


Field Summary
protected static java.lang.String SERVER_VERSION
           
protected static byte XBMSP_ERROR_AUTHENTICATION_FAILED
           
protected static byte XBMSP_ERROR_AUTHENTICATION_NEEDED
           
protected static byte XBMSP_ERROR_FAILURE
           
protected static byte XBMSP_ERROR_ILLEGAL_SEEK
           
protected static byte XBMSP_ERROR_INVALID_FILE
           
protected static byte XBMSP_ERROR_INVALID_HANDLE
           
protected static byte XBMSP_ERROR_INVALID_OPTION_VALUE
           
protected static byte XBMSP_ERROR_NO_SUCH_FILE
           
protected static byte XBMSP_ERROR_OK
           
protected static byte XBMSP_ERROR_OPEN_FAILED
           
protected static byte XBMSP_ERROR_OPTION_IS_READ_ONLY
           
protected static byte XBMSP_ERROR_TOO_LONG_READ
           
protected static byte XBMSP_ERROR_TOO_MANY_OPEN_FILES
           
protected static byte XBMSP_ERROR_UNSUPPORTED
           
protected static byte XBMSP_FILE_SEEK_TYPE_BCKFROMCUR
           
protected static byte XBMSP_FILE_SEEK_TYPE_BCKFROMEND
           
protected static byte XBMSP_FILE_SEEK_TYPE_FWDFROMBEG
           
protected static byte XBMSP_FILE_SEEK_TYPE_FWDFROMCUR
           
protected static byte XBMSP_PACKET_AUTHENTICATE
           
protected static byte XBMSP_PACKET_AUTHENTICATION_CONTINUE
           
protected static byte XBMSP_PACKET_AUTHENTICATION_INIT
           
protected static byte XBMSP_PACKET_CLOSE
           
protected static byte XBMSP_PACKET_CLOSE_ALL
           
protected static byte XBMSP_PACKET_ERROR
           
protected static byte XBMSP_PACKET_FILE_CONTENTS
           
protected static byte XBMSP_PACKET_FILE_DATA
           
protected static byte XBMSP_PACKET_FILE_INFO
           
protected static byte XBMSP_PACKET_FILE_OPEN
           
protected static byte XBMSP_PACKET_FILE_READ
           
protected static byte XBMSP_PACKET_FILE_SEEK
           
protected static byte XBMSP_PACKET_FILELIST_OPEN
           
protected static byte XBMSP_PACKET_FILELIST_READ
           
protected static byte XBMSP_PACKET_HANDLE
           
protected static byte XBMSP_PACKET_NULL
           
protected static byte XBMSP_PACKET_OK
           
protected static byte XBMSP_PACKET_SERVER_DISCOVERY_QUERY
          Packet types (e.g.
protected static byte XBMSP_PACKET_SERVER_DISCOVERY_REPLY
           
protected static byte XBMSP_PACKET_SET_CONFIGURATION_OPTION
           
protected static byte XBMSP_PACKET_SETCWD
           
protected static byte XBMSP_PACKET_UPCWD
           
 
Constructor Summary
protected XBMSPEncoderDecoder()
           
 
Method Summary
protected  void decodepacket(java.nio.ByteBuffer buff)
          Takes the socket buffer thats passed in and decodes the message.
protected  XBMSPEncoderDecoder encodePacketError(byte errorCode, java.lang.String errorMessage)
          Encodes a packet ERROR response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder encodePacketFileContents(java.nio.ByteBuffer data)
          Encodes a packet encodePacketFileContents response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder encodePacketFileData(java.lang.String name, java.lang.String data)
          Encodes a packet PacketFileData response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder encodePacketHandle(int handle)
          Encodes a packet PacketHandle response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder encodePacketOk()
          Encodes a packet OK response to this instance of XBMSPEncoderDecoder.
protected  java.nio.ByteBuffer getPacket()
          Call this after the message is ready to be transmitted.
protected  byte getPayloadByte()
          Gets the first byte from the payload..
protected  byte[] getPayloadData()
          Gets the first byte[] from the payload..
protected  int getPayloadInt()
          Gets the first Int from the payload..
protected  int getPayloadInt2()
          Gets the second Int from the payload..
protected  long getPayloadInt64()
          Gets the first long(INT64) from the payload..
protected  java.lang.String getPayloadString()
          Gets the first String from the payload..
protected  java.lang.String getPayloadString2()
          Gets the Second String from the payload..
protected  byte getType()
          Returns the packet type (type field)
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SERVER_VERSION

protected static final java.lang.String SERVER_VERSION
See Also:
Constant Field Values

XBMSP_PACKET_NULL

protected static final byte XBMSP_PACKET_NULL
See Also:
Constant Field Values

XBMSP_PACKET_SETCWD

protected static final byte XBMSP_PACKET_SETCWD
See Also:
Constant Field Values

XBMSP_PACKET_FILELIST_OPEN

protected static final byte XBMSP_PACKET_FILELIST_OPEN
See Also:
Constant Field Values

XBMSP_PACKET_FILELIST_READ

protected static final byte XBMSP_PACKET_FILELIST_READ
See Also:
Constant Field Values

XBMSP_PACKET_FILE_INFO

protected static final byte XBMSP_PACKET_FILE_INFO
See Also:
Constant Field Values

XBMSP_PACKET_FILE_OPEN

protected static final byte XBMSP_PACKET_FILE_OPEN
See Also:
Constant Field Values

XBMSP_PACKET_FILE_READ

protected static final byte XBMSP_PACKET_FILE_READ
See Also:
Constant Field Values

XBMSP_PACKET_FILE_SEEK

protected static final byte XBMSP_PACKET_FILE_SEEK
See Also:
Constant Field Values

XBMSP_PACKET_CLOSE

protected static final byte XBMSP_PACKET_CLOSE
See Also:
Constant Field Values

XBMSP_PACKET_CLOSE_ALL

protected static final byte XBMSP_PACKET_CLOSE_ALL
See Also:
Constant Field Values

XBMSP_PACKET_SET_CONFIGURATION_OPTION

protected static final byte XBMSP_PACKET_SET_CONFIGURATION_OPTION
See Also:
Constant Field Values

XBMSP_PACKET_AUTHENTICATION_INIT

protected static final byte XBMSP_PACKET_AUTHENTICATION_INIT
See Also:
Constant Field Values

XBMSP_PACKET_AUTHENTICATE

protected static final byte XBMSP_PACKET_AUTHENTICATE
See Also:
Constant Field Values

XBMSP_PACKET_UPCWD

protected static final byte XBMSP_PACKET_UPCWD
See Also:
Constant Field Values

XBMSP_PACKET_OK

protected static final byte XBMSP_PACKET_OK
See Also:
Constant Field Values

XBMSP_PACKET_ERROR

protected static final byte XBMSP_PACKET_ERROR
See Also:
Constant Field Values

XBMSP_PACKET_HANDLE

protected static final byte XBMSP_PACKET_HANDLE
See Also:
Constant Field Values

XBMSP_PACKET_FILE_DATA

protected static final byte XBMSP_PACKET_FILE_DATA
See Also:
Constant Field Values

XBMSP_PACKET_FILE_CONTENTS

protected static final byte XBMSP_PACKET_FILE_CONTENTS
See Also:
Constant Field Values

XBMSP_PACKET_AUTHENTICATION_CONTINUE

protected static final byte XBMSP_PACKET_AUTHENTICATION_CONTINUE
See Also:
Constant Field Values

XBMSP_PACKET_SERVER_DISCOVERY_QUERY

protected static final byte XBMSP_PACKET_SERVER_DISCOVERY_QUERY
Packet types (e.g. type field) for Server discovery protocol

See Also:
Constant Field Values

XBMSP_PACKET_SERVER_DISCOVERY_REPLY

protected static final byte XBMSP_PACKET_SERVER_DISCOVERY_REPLY
See Also:
Constant Field Values

XBMSP_ERROR_OK

protected static final byte XBMSP_ERROR_OK
See Also:
Constant Field Values

XBMSP_ERROR_FAILURE

protected static final byte XBMSP_ERROR_FAILURE
See Also:
Constant Field Values

XBMSP_ERROR_UNSUPPORTED

protected static final byte XBMSP_ERROR_UNSUPPORTED
See Also:
Constant Field Values

XBMSP_ERROR_NO_SUCH_FILE

protected static final byte XBMSP_ERROR_NO_SUCH_FILE
See Also:
Constant Field Values

XBMSP_ERROR_INVALID_FILE

protected static final byte XBMSP_ERROR_INVALID_FILE
See Also:
Constant Field Values

XBMSP_ERROR_INVALID_HANDLE

protected static final byte XBMSP_ERROR_INVALID_HANDLE
See Also:
Constant Field Values

XBMSP_ERROR_OPEN_FAILED

protected static final byte XBMSP_ERROR_OPEN_FAILED
See Also:
Constant Field Values

XBMSP_ERROR_TOO_MANY_OPEN_FILES

protected static final byte XBMSP_ERROR_TOO_MANY_OPEN_FILES
See Also:
Constant Field Values

XBMSP_ERROR_TOO_LONG_READ

protected static final byte XBMSP_ERROR_TOO_LONG_READ
See Also:
Constant Field Values

XBMSP_ERROR_ILLEGAL_SEEK

protected static final byte XBMSP_ERROR_ILLEGAL_SEEK
See Also:
Constant Field Values

XBMSP_ERROR_OPTION_IS_READ_ONLY

protected static final byte XBMSP_ERROR_OPTION_IS_READ_ONLY
See Also:
Constant Field Values

XBMSP_ERROR_INVALID_OPTION_VALUE

protected static final byte XBMSP_ERROR_INVALID_OPTION_VALUE
See Also:
Constant Field Values

XBMSP_ERROR_AUTHENTICATION_NEEDED

protected static final byte XBMSP_ERROR_AUTHENTICATION_NEEDED
See Also:
Constant Field Values

XBMSP_ERROR_AUTHENTICATION_FAILED

protected static final byte XBMSP_ERROR_AUTHENTICATION_FAILED
See Also:
Constant Field Values

XBMSP_FILE_SEEK_TYPE_FWDFROMBEG

protected static final byte XBMSP_FILE_SEEK_TYPE_FWDFROMBEG
See Also:
Constant Field Values

XBMSP_FILE_SEEK_TYPE_BCKFROMEND

protected static final byte XBMSP_FILE_SEEK_TYPE_BCKFROMEND
See Also:
Constant Field Values

XBMSP_FILE_SEEK_TYPE_FWDFROMCUR

protected static final byte XBMSP_FILE_SEEK_TYPE_FWDFROMCUR
See Also:
Constant Field Values

XBMSP_FILE_SEEK_TYPE_BCKFROMCUR

protected static final byte XBMSP_FILE_SEEK_TYPE_BCKFROMCUR
See Also:
Constant Field Values
Constructor Detail

XBMSPEncoderDecoder

protected XBMSPEncoderDecoder()
Method Detail

getPacket

protected java.nio.ByteBuffer getPacket()
Call this after the message is ready to be transmitted.

Returns:
a buffer containing the encoded packet.

getType

protected byte getType()
Returns the packet type (type field)

Returns:

decodepacket

protected void decodepacket(java.nio.ByteBuffer buff)
Takes the socket buffer thats passed in and decodes the message.

Parameters:
buff - the Buffer from the socket.

encodePacketOk

protected XBMSPEncoderDecoder encodePacketOk()
Encodes a packet OK response to this instance of XBMSPEncoderDecoder. An encoded message is always based on a message recieved from the client. Hence we use the orginal XBMSPEncoderDecoder instance of the recieved message to encode the response.

Returns:
a new XBMSPEncoderDecoder with the response packet.

encodePacketError

protected XBMSPEncoderDecoder encodePacketError(byte errorCode,
                                                java.lang.String errorMessage)
Encodes a packet ERROR response to this instance of XBMSPEncoderDecoder. An encoded message is always based on a message recieved from the client. Hence we use the orginal XBMSPEncoderDecoder instance of the recieved message to encode the response.

Parameters:
errorCode - the error code as defined by the XBMSP protocol.
errorMessage - an optional TEXT message
Returns:
a new XBMSPEncoderDecoder with the response packet.

encodePacketHandle

protected XBMSPEncoderDecoder encodePacketHandle(int handle)
Encodes a packet PacketHandle response to this instance of XBMSPEncoderDecoder. An encoded message is always based on a message recieved from the client. Hence we use the orginal XBMSPEncoderDecoder instance of the recieved message to encode the response.

Parameters:
handle - the handle number of the file or directory
Returns:
a new XBMSPEncoderDecoder with the response packet.

encodePacketFileData

protected XBMSPEncoderDecoder encodePacketFileData(java.lang.String name,
                                                   java.lang.String data)
Encodes a packet PacketFileData response to this instance of XBMSPEncoderDecoder. An encoded message is always based on a message recieved from the client. Hence we use the orginal XBMSPEncoderDecoder instance of the recieved message to encode the response.

Parameters:
name - The name of the file or handle(file.getName())
data - The XML encoded String with the file data. (e.g. file size, accessTime, etc..)
Returns:
a new XBMSPEncoderDecoder with the response packet.

encodePacketFileContents

protected XBMSPEncoderDecoder encodePacketFileContents(java.nio.ByteBuffer data)
Encodes a packet encodePacketFileContents response to this instance of XBMSPEncoderDecoder. An encoded message is always based on a message recieved from the client. Hence we use the orginal XBMSPEncoderDecoder instance of the recieved message to encode the response.

Parameters:
data - the raw file data for the request
Returns:
a new XBMSPEncoderDecoder with the response packet.

getPayloadByte

protected byte getPayloadByte()
Gets the first byte from the payload.. (message data section)

Returns:

getPayloadData

protected byte[] getPayloadData()
Gets the first byte[] from the payload.. (message data section)

Returns:

getPayloadInt

protected int getPayloadInt()
Gets the first Int from the payload.. (message data section)

Returns:

getPayloadInt2

protected int getPayloadInt2()
Gets the second Int from the payload.. (message data section)

Returns:

getPayloadInt64

protected long getPayloadInt64()
Gets the first long(INT64) from the payload.. (message data section)

Returns:

getPayloadString

protected java.lang.String getPayloadString()
Gets the first String from the payload.. (message data section)

Returns:

getPayloadString2

protected java.lang.String getPayloadString2()
Gets the Second String from the payload.. (message data section)

Returns:


javadoc/com/superhac/JXBStreamer/Core/XBMSPServer.html0000644000175000017500000005135410535374265023027 0ustar sjscottsjscott XBMSPServer

com.superhac.JXBStreamer.Core
Class XBMSPServer

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.XBMSPServer
All Implemented Interfaces:
java.lang.Runnable

public class XBMSPServer
extends java.lang.Object
implements java.lang.Runnable

This is the main class that is used for running a XBMSP server. The server uses non-blocking socket IO and runs as a thread.

More information can be found at Superhac.com


Constructor Summary
XBMSPServer()
          Creates an instance of the XBMSP Server that runs as a thread.
 
Method Summary
protected  int getMaximumClientIdleTime()
          Gets the maximum client idle time before being disconnected by the server.
 int getPort()
          Gets the binding port for the XBMSP server.
protected  java.util.ArrayList<XBMSPServerMessageHandler> getServerMessageHandlers()
          Returns an ArrayList of the message handlers.
 ServerStatus getServerStatus()
          Provides detailed information about each connected client.
 boolean isAutoDiscoveryEnabled()
          Is the the XBMSP server configured for the AutoDiscovery Service(UDP)? Clients can broadcast on port 1400 and the server will respond with identifying information that can be used to connect to the server.
 boolean isServerRunning()
          Is the server running.
 void run()
          Main loop of the Server running as a Thread.
 void setAutoDiscoveryEnabled(boolean autoDiscoveryEnabled)
          Clients can broadcast on port 1400 and the server will respond with identifying information that can be used to connect to the server.
protected  void setMaximumClientIdleTime(int maximumClientIdleTime)
          Sets the maximum client idle time before being disconnected by the server.
 void setPort(int port)
          Set the port number the server will listen on.
 void setVirtualRoot(java.util.ArrayList<java.io.File> virtualRoot)
          Set the virtual root directory.
 void startServer()
          Starts the server so it can recieve incoming connections.
 void stopServer()
          Stops the server from accepting connections and also disconnects any connected clients.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XBMSPServer

public XBMSPServer()
Creates an instance of the XBMSP Server that runs as a thread. The instance threads itself and does not stop running as a thread until the virtual machine is terminated.

Method Detail

run

public void run()
Main loop of the Server running as a Thread. Comes from impementing Runnable

Specified by:
run in interface java.lang.Runnable

getServerStatus

public ServerStatus getServerStatus()
Provides detailed information about each connected client.

Returns:
The server status object which contains info about each connected client.

isServerRunning

public boolean isServerRunning()
Is the server running. E.g. Listening for incoming connections.

Returns:
True if the server is awaiting comming connections and false if not.

stopServer

public void stopServer()
Stops the server from accepting connections and also disconnects any connected clients.


startServer

public void startServer()
Starts the server so it can recieve incoming connections.


getPort

public int getPort()
Gets the binding port for the XBMSP server.

Returns:
The port number the server is listening on.

setPort

public void setPort(int port)
Set the port number the server will listen on.

Parameters:
port - The port number the server will bind to.

isAutoDiscoveryEnabled

public boolean isAutoDiscoveryEnabled()
Is the the XBMSP server configured for the AutoDiscovery Service(UDP)? Clients can broadcast on port 1400 and the server will respond with identifying information that can be used to connect to the server.

Returns:
True if the Discovery Server is running and False if not.

setAutoDiscoveryEnabled

public void setAutoDiscoveryEnabled(boolean autoDiscoveryEnabled)
Clients can broadcast on port 1400 and the server will respond with identifying information that can be used to connect to the server.

Parameters:
autoDiscoveryEnabled - True if it should be enabled and false if not.

setVirtualRoot

public void setVirtualRoot(java.util.ArrayList<java.io.File> virtualRoot)
Set the virtual root directory. This allows multiple directories to be shared that are spread over different paths. The client is presented with a virtual root directory that consists of the supplied paths as a single dirctory.

Parameters:
virtualRoot - An arraylist of files that make up the virtual root directory

getServerMessageHandlers

protected java.util.ArrayList<XBMSPServerMessageHandler> getServerMessageHandlers()
Returns an ArrayList of the message handlers. The message handlers handle the communicate between the client and the server. Each connected client has its own message handler. As a packet comes into the server it is routed to the appropraite message handler for that client.

Returns:
The current message handlers for the clients

getMaximumClientIdleTime

protected int getMaximumClientIdleTime()
Gets the maximum client idle time before being disconnected by the server.

Returns:
The currently set Idle time in seconds.

setMaximumClientIdleTime

protected void setMaximumClientIdleTime(int maximumClientIdleTime)
Sets the maximum client idle time before being disconnected by the server.

Parameters:
maximumClientIdleTime - The maximum amount of idle time before the server disconnects the client.


javadoc/com/superhac/JXBStreamer/Core/XBMSPServerMessageHandler.html0000644000175000017500000003243510535374265025631 0ustar sjscottsjscott XBMSPServerMessageHandler

com.superhac.JXBStreamer.Core
Class XBMSPServerMessageHandler

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.XBMSPServerMessageHandler

public class XBMSPServerMessageHandler
extends java.lang.Object

Handles all the messaging for client communication with the server.

More information can be found at Superhac.com


Constructor Summary
protected XBMSPServerMessageHandler(java.nio.channels.SocketChannel sc, java.util.ArrayList<java.io.File> virtualRoot)
           
 
Method Summary
protected  long getLastTransmissionDelay()
          Gets the number of seconds since client last sent a message.
protected  java.nio.channels.SocketChannel getSocketChannel()
          Gets the socket channel that assigned to this message handler.
 ConnectedClientStatus getStatus()
          Gets the clients status for this message handler.
protected  void IncommingMessage(java.nio.ByteBuffer message)
          Processes the incoming messages
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XBMSPServerMessageHandler

protected XBMSPServerMessageHandler(java.nio.channels.SocketChannel sc,
                                    java.util.ArrayList<java.io.File> virtualRoot)
Parameters:
sc - The socket channel for this client
virtualRoot - the shared directorys for the virtual roots.
Method Detail

IncommingMessage

protected void IncommingMessage(java.nio.ByteBuffer message)
Processes the incoming messages

Parameters:
message - the buffer from socket.

getSocketChannel

protected java.nio.channels.SocketChannel getSocketChannel()
Gets the socket channel that assigned to this message handler.

Returns:
the socket channel

getStatus

public ConnectedClientStatus getStatus()
Gets the clients status for this message handler.

Returns:
a ConnectedClientStatus

getLastTransmissionDelay

protected long getLastTransmissionDelay()
Gets the number of seconds since client last sent a message.

Returns:
the number of seconds since the client sent a message.


javadoc/com/superhac/JXBStreamer/Core/XBMSPxmlEncoder.html0000644000175000017500000002374710535374265023666 0ustar sjscottsjscott XBMSPxmlEncoder

com.superhac.JXBStreamer.Core
Class XBMSPxmlEncoder

java.lang.Object
  extended by com.superhac.JXBStreamer.Core.XBMSPxmlEncoder

public class XBMSPxmlEncoder
extends java.lang.Object

This class handles the encoding of the XML file data in the XBMSP protocol.

More information can be found at Superhac.com


Constructor Summary
XBMSPxmlEncoder()
           
 
Method Summary
protected static java.lang.String encodeEntry(java.io.File entry)
          Encodes a file or directory entry info into the XBMSP protocol format.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XBMSPxmlEncoder

public XBMSPxmlEncoder()
Method Detail

encodeEntry

protected static java.lang.String encodeEntry(java.io.File entry)
Encodes a file or directory entry info into the XBMSP protocol format.

Parameters:
entry - the file for which the encoded information should be generated
Returns:
the encoded XML


javadoc/com/superhac/JXBStreamer/Core/package-frame.html0000644000175000017500000000424310535374265023425 0ustar sjscottsjscott com.superhac.JXBStreamer.Core com.superhac.JXBStreamer.Core
Classes 
ConnectedClientStatus
Debug
DirectoryHandlerObject
FileHandlerObject
InternalIPFinder
ServerStatus
XBMSPDiscoverServer
XBMSPEncoderDecoder
XBMSPServer
XBMSPServerMessageHandler
XBMSPxmlEncoder
javadoc/com/superhac/JXBStreamer/Core/package-summary.html0000644000175000017500000002201210535374265024022 0ustar sjscottsjscott com.superhac.JXBStreamer.Core

Package com.superhac.JXBStreamer.Core

Class Summary
ConnectedClientStatus Contains connected client status varibles like IP address, transfer rate, etc...
Debug This is a static class.
DirectoryHandlerObject The DirectoryHandlerObject maps directories to handles and provides services for fulfilling client requests on directories.
FileHandlerObject The FileHandlerObject maps Files to handles and provides services for fulfilling client requests on Files.
InternalIPFinder A static class for getting the servers own binding IP address.
ServerStatus This object is used to get the status of the server and the connected clients status...
XBMSPDiscoverServer This class handles the server socket connections for the XBMSP Discovery protocol.
XBMSPEncoderDecoder This handles all the XMBSP packet Decoding and Encoding.
XBMSPServer This is the main class that is used for running a XBMSP server.
XBMSPServerMessageHandler Handles all the messaging for client communication with the server.
XBMSPxmlEncoder This class handles the encoding of the XML file data in the XBMSP protocol.
 



javadoc/com/superhac/JXBStreamer/Core/package-tree.html0000644000175000017500000001744010535374265023275 0ustar sjscottsjscott com.superhac.JXBStreamer.Core Class Hierarchy

Hierarchy For Package com.superhac.JXBStreamer.Core

Package Hierarchies:
All Packages

Class Hierarchy



javadoc/com/superhac/JXBStreamer/Core/class-use/0000755000175000017500000000000010535374265021750 5ustar sjscottsjscottjavadoc/com/superhac/JXBStreamer/Core/class-use/DirectoryHandlerObject.html0000644000175000017500000001347610535374265027242 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.DirectoryHandlerObject

Uses of Class
com.superhac.JXBStreamer.Core.DirectoryHandlerObject

No usage of com.superhac.JXBStreamer.Core.DirectoryHandlerObject



javadoc/com/superhac/JXBStreamer/Core/class-use/XBMSPServerMessageHandler.html0000644000175000017500000001773210535374265027533 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.XBMSPServerMessageHandler

Uses of Class
com.superhac.JXBStreamer.Core.XBMSPServerMessageHandler

Packages that use XBMSPServerMessageHandler
com.superhac.JXBStreamer.Core   
 

Uses of XBMSPServerMessageHandler in com.superhac.JXBStreamer.Core
 

Methods in com.superhac.JXBStreamer.Core that return types with arguments of type XBMSPServerMessageHandler
protected  java.util.ArrayList<XBMSPServerMessageHandler> XBMSPServer.getServerMessageHandlers()
          Returns an ArrayList of the message handlers.
 



javadoc/com/superhac/JXBStreamer/Core/class-use/XBMSPServer.html0000644000175000017500000002077510535374265024731 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.XBMSPServer

Uses of Class
com.superhac.JXBStreamer.Core.XBMSPServer

Packages that use XBMSPServer
com.superhac.JXBStreamer.Gui   
 

Uses of XBMSPServer in com.superhac.JXBStreamer.Gui
 

Constructors in com.superhac.JXBStreamer.Gui with parameters of type XBMSPServer
ConnectionStatusTabMod(XBMSPServer server)
          Creates a new instance of IncommingConnTableModel
MainStatusBar(XBMSPServer server)
           
StatusPanel(XBMSPServer server)
           
 



javadoc/com/superhac/JXBStreamer/Core/class-use/ConnectedClientStatus.html0000644000175000017500000002365510535374265027116 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.ConnectedClientStatus

Uses of Class
com.superhac.JXBStreamer.Core.ConnectedClientStatus

Packages that use ConnectedClientStatus
com.superhac.JXBStreamer.Core   
 

Uses of ConnectedClientStatus in com.superhac.JXBStreamer.Core
 

Methods in com.superhac.JXBStreamer.Core that return ConnectedClientStatus
 ConnectedClientStatus XBMSPServerMessageHandler.getStatus()
          Gets the clients status for this message handler.
 

Methods in com.superhac.JXBStreamer.Core that return types with arguments of type ConnectedClientStatus
 java.util.ArrayList<ConnectedClientStatus> ServerStatus.getClients()
          Gets the list of ConnectedClientStatus objects
 

Constructor parameters in com.superhac.JXBStreamer.Core with type arguments of type ConnectedClientStatus
ServerStatus(boolean isServerRunning, java.util.ArrayList<ConnectedClientStatus> clients)
           
 



javadoc/com/superhac/JXBStreamer/Core/class-use/XBMSPxmlEncoder.html0000644000175000017500000001337010535374265025554 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.XBMSPxmlEncoder

Uses of Class
com.superhac.JXBStreamer.Core.XBMSPxmlEncoder

No usage of com.superhac.JXBStreamer.Core.XBMSPxmlEncoder



javadoc/com/superhac/JXBStreamer/Core/class-use/XBMSPEncoderDecoder.html0000644000175000017500000002510610535374265026321 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.XBMSPEncoderDecoder

Uses of Class
com.superhac.JXBStreamer.Core.XBMSPEncoderDecoder

Packages that use XBMSPEncoderDecoder
com.superhac.JXBStreamer.Core   
 

Uses of XBMSPEncoderDecoder in com.superhac.JXBStreamer.Core
 

Methods in com.superhac.JXBStreamer.Core that return XBMSPEncoderDecoder
protected  XBMSPEncoderDecoder XBMSPEncoderDecoder.encodePacketError(byte errorCode, java.lang.String errorMessage)
          Encodes a packet ERROR response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder XBMSPEncoderDecoder.encodePacketFileContents(java.nio.ByteBuffer data)
          Encodes a packet encodePacketFileContents response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder XBMSPEncoderDecoder.encodePacketFileData(java.lang.String name, java.lang.String data)
          Encodes a packet PacketFileData response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder XBMSPEncoderDecoder.encodePacketHandle(int handle)
          Encodes a packet PacketHandle response to this instance of XBMSPEncoderDecoder.
protected  XBMSPEncoderDecoder XBMSPEncoderDecoder.encodePacketOk()
          Encodes a packet OK response to this instance of XBMSPEncoderDecoder.
 



javadoc/com/superhac/JXBStreamer/Core/class-use/XBMSPDiscoverServer.html0000644000175000017500000001344010535374265026417 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.XBMSPDiscoverServer

Uses of Class
com.superhac.JXBStreamer.Core.XBMSPDiscoverServer

No usage of com.superhac.JXBStreamer.Core.XBMSPDiscoverServer



javadoc/com/superhac/JXBStreamer/Core/class-use/Debug.html0000644000175000017500000001322410535374265023666 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.Debug

Uses of Class
com.superhac.JXBStreamer.Core.Debug

No usage of com.superhac.JXBStreamer.Core.Debug



javadoc/com/superhac/JXBStreamer/Core/class-use/InternalIPFinder.html0000644000175000017500000001340210535374265025773 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.InternalIPFinder

Uses of Class
com.superhac.JXBStreamer.Core.InternalIPFinder

No usage of com.superhac.JXBStreamer.Core.InternalIPFinder



javadoc/com/superhac/JXBStreamer/Core/class-use/ServerStatus.html0000644000175000017500000001726610535374265025324 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.ServerStatus

Uses of Class
com.superhac.JXBStreamer.Core.ServerStatus

Packages that use ServerStatus
com.superhac.JXBStreamer.Core   
 

Uses of ServerStatus in com.superhac.JXBStreamer.Core
 

Methods in com.superhac.JXBStreamer.Core that return ServerStatus
 ServerStatus XBMSPServer.getServerStatus()
          Provides detailed information about each connected client.
 



javadoc/com/superhac/JXBStreamer/Core/class-use/FileHandlerObject.html0000644000175000017500000001341410535374265026145 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Core.FileHandlerObject

Uses of Class
com.superhac.JXBStreamer.Core.FileHandlerObject

No usage of com.superhac.JXBStreamer.Core.FileHandlerObject



javadoc/com/superhac/JXBStreamer/Core/package-use.html0000644000175000017500000002113410535374265023125 0ustar sjscottsjscott Uses of Package com.superhac.JXBStreamer.Core

Uses of Package
com.superhac.JXBStreamer.Core

Packages that use com.superhac.JXBStreamer.Core
com.superhac.JXBStreamer.Core   
com.superhac.JXBStreamer.Gui   
 

Classes in com.superhac.JXBStreamer.Core used by com.superhac.JXBStreamer.Core
ConnectedClientStatus
          Contains connected client status varibles like IP address, transfer rate, etc...
ServerStatus
          This object is used to get the status of the server and the connected clients status...
XBMSPEncoderDecoder
          This handles all the XMBSP packet Decoding and Encoding.
XBMSPServerMessageHandler
          Handles all the messaging for client communication with the server.
 

Classes in com.superhac.JXBStreamer.Core used by com.superhac.JXBStreamer.Gui
XBMSPServer
          This is the main class that is used for running a XBMSP server.
 



javadoc/com/superhac/JXBStreamer/Gui/0000755000175000017500000000000010535374265017705 5ustar sjscottsjscottjavadoc/com/superhac/JXBStreamer/Gui/AboutWindow.html0000644000175000017500000002302510535374265023037 0ustar sjscottsjscott AboutWindow

com.superhac.JXBStreamer.Gui
Class AboutWindow

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.AboutWindow

public class AboutWindow
extends java.lang.Object


Constructor Summary
AboutWindow()
           
 
Method Summary
 javax.swing.JFrame getJFrame(javax.swing.JFrame parent)
          This method initializes jFrame
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AboutWindow

public AboutWindow()
Method Detail

getJFrame

public javax.swing.JFrame getJFrame(javax.swing.JFrame parent)
This method initializes jFrame

Returns:
javax.swing.JFrame


javadoc/com/superhac/JXBStreamer/Gui/ConnectionStatusTabMod.html0000644000175000017500000004004710535374265025172 0ustar sjscottsjscott ConnectionStatusTabMod

com.superhac.JXBStreamer.Gui
Class ConnectionStatusTabMod

java.lang.Object
  extended by javax.swing.table.AbstractTableModel
      extended by com.superhac.JXBStreamer.Gui.ConnectionStatusTabMod
All Implemented Interfaces:
java.io.Serializable, javax.swing.table.TableModel

public class ConnectionStatusTabMod
extends javax.swing.table.AbstractTableModel

See Also:
Serialized Form

Field Summary
 java.lang.String[] colNames
           
 
Fields inherited from class javax.swing.table.AbstractTableModel
listenerList
 
Constructor Summary
ConnectionStatusTabMod(XBMSPServer server)
          Creates a new instance of IncommingConnTableModel
 
Method Summary
 int getColumnCount()
           
 java.lang.String getColumnName(int col)
           
 int getRowCount()
           
 java.lang.Object getValueAt(int row, int col)
           
 boolean isCellEditable(int row, int col)
           
 void update()
           
 
Methods inherited from class javax.swing.table.AbstractTableModel
addTableModelListener, findColumn, fireTableCellUpdated, fireTableChanged, fireTableDataChanged, fireTableRowsDeleted, fireTableRowsInserted, fireTableRowsUpdated, fireTableStructureChanged, getColumnClass, getListeners, getTableModelListeners, removeTableModelListener, setValueAt
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

colNames

public java.lang.String[] colNames
Constructor Detail

ConnectionStatusTabMod

public ConnectionStatusTabMod(XBMSPServer server)
Creates a new instance of IncommingConnTableModel

Method Detail

getColumnName

public java.lang.String getColumnName(int col)
Specified by:
getColumnName in interface javax.swing.table.TableModel
Overrides:
getColumnName in class javax.swing.table.AbstractTableModel

getRowCount

public int getRowCount()

getColumnCount

public int getColumnCount()

getValueAt

public java.lang.Object getValueAt(int row,
                                   int col)

isCellEditable

public boolean isCellEditable(int row,
                              int col)
Specified by:
isCellEditable in interface javax.swing.table.TableModel
Overrides:
isCellEditable in class javax.swing.table.AbstractTableModel

update

public void update()


javadoc/com/superhac/JXBStreamer/Gui/DebugWindow.html0000644000175000017500000002326310535374265023017 0ustar sjscottsjscott DebugWindow

com.superhac.JXBStreamer.Gui
Class DebugWindow

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.DebugWindow

public class DebugWindow
extends java.lang.Object


Constructor Summary
DebugWindow()
           
 
Method Summary
 javax.swing.JFrame getJFrame()
          This method initializes jFrame
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DebugWindow

public DebugWindow()
Method Detail

getJFrame

public javax.swing.JFrame getJFrame()
This method initializes jFrame

Returns:
javax.swing.JFrame


javadoc/com/superhac/JXBStreamer/Gui/FileTreeModel.html0000644000175000017500000004551010535374265023260 0ustar sjscottsjscott FileTreeModel

com.superhac.JXBStreamer.Gui
Class FileTreeModel

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.FileTreeModel
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, javax.swing.tree.TreeModel

public class FileTreeModel
extends java.lang.Object
implements javax.swing.tree.TreeModel, java.io.Serializable, java.lang.Cloneable

Example of a simple static TreeModel. It contains a (java.io.File) directory structure. (C) 2001 Christian Kaufhold (ch-kaufhold@gmx.de)

See Also:
Serialized Form

Field Summary
protected  javax.swing.event.EventListenerList listeners
           
 
Constructor Summary
FileTreeModel(java.io.File root)
           
 
Method Summary
 void addTreeModelListener(javax.swing.event.TreeModelListener l)
           
protected  java.util.List children(java.lang.Object node)
           
 java.lang.Object clone()
           
 java.lang.Object getChild(java.lang.Object parent, int index)
           
 int getChildCount(java.lang.Object node)
           
 int getIndexOfChild(java.lang.Object parent, java.lang.Object child)
           
 java.lang.Object getRoot()
           
 boolean isLeaf(java.lang.Object node)
           
static void main(java.lang.String[] args)
           
 void removeTreeModelListener(javax.swing.event.TreeModelListener l)
           
 void valueForPathChanged(javax.swing.tree.TreePath path, java.lang.Object value)
           
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

listeners

protected javax.swing.event.EventListenerList listeners
Constructor Detail

FileTreeModel

public FileTreeModel(java.io.File root)
              throws java.lang.NullPointerException
Throws:
java.lang.NullPointerException
Method Detail

getRoot

public java.lang.Object getRoot()
Specified by:
getRoot in interface javax.swing.tree.TreeModel

isLeaf

public boolean isLeaf(java.lang.Object node)
Specified by:
isLeaf in interface javax.swing.tree.TreeModel

getChildCount

public int getChildCount(java.lang.Object node)
Specified by:
getChildCount in interface javax.swing.tree.TreeModel

getChild

public java.lang.Object getChild(java.lang.Object parent,
                                 int index)
Specified by:
getChild in interface javax.swing.tree.TreeModel

getIndexOfChild

public int getIndexOfChild(java.lang.Object parent,
                           java.lang.Object child)
Specified by:
getIndexOfChild in interface javax.swing.tree.TreeModel

children

protected java.util.List children(java.lang.Object node)

valueForPathChanged

public void valueForPathChanged(javax.swing.tree.TreePath path,
                                java.lang.Object value)
Specified by:
valueForPathChanged in interface javax.swing.tree.TreeModel

addTreeModelListener

public void addTreeModelListener(javax.swing.event.TreeModelListener l)
Specified by:
addTreeModelListener in interface javax.swing.tree.TreeModel

removeTreeModelListener

public void removeTreeModelListener(javax.swing.event.TreeModelListener l)
Specified by:
removeTreeModelListener in interface javax.swing.tree.TreeModel

clone

public java.lang.Object clone()
Overrides:
clone in class java.lang.Object

main

public static void main(java.lang.String[] args)


javadoc/com/superhac/JXBStreamer/Gui/Main.html0000644000175000017500000003301110535374265021455 0ustar sjscottsjscott Main

com.superhac.JXBStreamer.Gui
Class Main

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.Main

public class Main
extends java.lang.Object


Constructor Summary
Main()
           
 
Method Summary
 void displayConnectionStatusPane()
           
 void displaySharePanel()
           
 void hideConnectionStatusPane()
           
 void initAboutWindow()
           
 void initConnectionStatusPanel()
           
 void initSharePanel()
           
 void loadSettings()
           
static void main(java.lang.String[] args)
           
 void saveSettings()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Main

public Main()
Method Detail

hideConnectionStatusPane

public void hideConnectionStatusPane()

displayConnectionStatusPane

public void displayConnectionStatusPane()

displaySharePanel

public void displaySharePanel()

initSharePanel

public void initSharePanel()

initConnectionStatusPanel

public void initConnectionStatusPanel()

initAboutWindow

public void initAboutWindow()

loadSettings

public void loadSettings()

saveSettings

public void saveSettings()

main

public static void main(java.lang.String[] args)


javadoc/com/superhac/JXBStreamer/Gui/MainStatusBar.html0000644000175000017500000002500110535374265023306 0ustar sjscottsjscott MainStatusBar

com.superhac.JXBStreamer.Gui
Class MainStatusBar

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.MainStatusBar

public class MainStatusBar
extends java.lang.Object


Constructor Summary
MainStatusBar(XBMSPServer server)
           
 
Method Summary
 javax.swing.JPanel getJPanel()
          This method initializes jPanel
 void update()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MainStatusBar

public MainStatusBar(XBMSPServer server)
Method Detail

getJPanel

public javax.swing.JPanel getJPanel()
This method initializes jPanel

Returns:
javax.swing.JPanel

update

public void update()


javadoc/com/superhac/JXBStreamer/Gui/SaveAndLoadSettings.html0000644000175000017500000003167510535374265024451 0ustar sjscottsjscott SaveAndLoadSettings

com.superhac.JXBStreamer.Gui
Class SaveAndLoadSettings

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.SaveAndLoadSettings
All Implemented Interfaces:
java.io.Serializable

public class SaveAndLoadSettings
extends java.lang.Object
implements java.io.Serializable

See Also:
Serialized Form

Field Summary
 boolean enableAutoDiscovery
           
 int portNumber
           
 java.util.ArrayList<java.io.File> shares
           
 
Constructor Summary
SaveAndLoadSettings()
           
 
Method Summary
 SaveAndLoadSettings loadSettings()
           
 void saveSettings()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

portNumber

public int portNumber

enableAutoDiscovery

public boolean enableAutoDiscovery

shares

public java.util.ArrayList<java.io.File> shares
Constructor Detail

SaveAndLoadSettings

public SaveAndLoadSettings()
Method Detail

saveSettings

public void saveSettings()

loadSettings

public SaveAndLoadSettings loadSettings()


javadoc/com/superhac/JXBStreamer/Gui/SettingsWindow.html0000644000175000017500000002762010535374265023572 0ustar sjscottsjscott SettingsWindow

com.superhac.JXBStreamer.Gui
Class SettingsWindow

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.SettingsWindow

public class SettingsWindow
extends java.lang.Object


Constructor Summary
SettingsWindow()
           
SettingsWindow(java.lang.String port, boolean autoDiscoveryEnabled)
           
 
Method Summary
 javax.swing.JDialog getJDialog(javax.swing.JFrame parent)
          This method initializes jDialog
 int getPort()
           
 boolean isAutoDiscoveryEnabled()
           
 boolean isResetServer()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SettingsWindow

public SettingsWindow()

SettingsWindow

public SettingsWindow(java.lang.String port,
                      boolean autoDiscoveryEnabled)
Method Detail

getJDialog

public javax.swing.JDialog getJDialog(javax.swing.JFrame parent)
This method initializes jDialog

Returns:
javax.swing.JDialog

isResetServer

public boolean isResetServer()

getPort

public int getPort()

isAutoDiscoveryEnabled

public boolean isAutoDiscoveryEnabled()


javadoc/com/superhac/JXBStreamer/Gui/SharePanel.html0000644000175000017500000002462710535374265022630 0ustar sjscottsjscott SharePanel

com.superhac.JXBStreamer.Gui
Class SharePanel

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.SharePanel

public class SharePanel
extends java.lang.Object


Constructor Summary
SharePanel(java.util.ArrayList<java.io.File> shares)
           
 
Method Summary
 javax.swing.JPanel getJPanel()
          This method initializes jPanel
 void setShareList(java.util.ArrayList<java.io.File> shares)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SharePanel

public SharePanel(java.util.ArrayList<java.io.File> shares)
Method Detail

getJPanel

public javax.swing.JPanel getJPanel()
This method initializes jPanel

Returns:
javax.swing.JPanel

setShareList

public void setShareList(java.util.ArrayList<java.io.File> shares)


javadoc/com/superhac/JXBStreamer/Gui/ShareTableModel.html0000644000175000017500000004042010535374265023566 0ustar sjscottsjscott ShareTableModel

com.superhac.JXBStreamer.Gui
Class ShareTableModel

java.lang.Object
  extended by javax.swing.table.AbstractTableModel
      extended by com.superhac.JXBStreamer.Gui.ShareTableModel
All Implemented Interfaces:
java.io.Serializable, javax.swing.table.TableModel

public class ShareTableModel
extends javax.swing.table.AbstractTableModel

See Also:
Serialized Form

Field Summary
 java.lang.String[] colNames
           
 
Fields inherited from class javax.swing.table.AbstractTableModel
listenerList
 
Constructor Summary
ShareTableModel(java.util.ArrayList<java.io.File> shares)
          Creates a new instance of IncommingConnTableModel
 
Method Summary
 void addSharePath(java.io.File file)
           
 int getColumnCount()
           
 java.lang.String getColumnName(int col)
           
 int getRowCount()
           
 java.lang.Object getValueAt(int row, int col)
           
 boolean isCellEditable(int row, int col)
           
 void removeSharePath(int index)
           
 
Methods inherited from class javax.swing.table.AbstractTableModel
addTableModelListener, findColumn, fireTableCellUpdated, fireTableChanged, fireTableDataChanged, fireTableRowsDeleted, fireTableRowsInserted, fireTableRowsUpdated, fireTableStructureChanged, getColumnClass, getListeners, getTableModelListeners, removeTableModelListener, setValueAt
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

colNames

public java.lang.String[] colNames
Constructor Detail

ShareTableModel

public ShareTableModel(java.util.ArrayList<java.io.File> shares)
Creates a new instance of IncommingConnTableModel

Method Detail

getColumnName

public java.lang.String getColumnName(int col)
Specified by:
getColumnName in interface javax.swing.table.TableModel
Overrides:
getColumnName in class javax.swing.table.AbstractTableModel

getRowCount

public int getRowCount()

getColumnCount

public int getColumnCount()

getValueAt

public java.lang.Object getValueAt(int row,
                                   int col)

isCellEditable

public boolean isCellEditable(int row,
                              int col)
Specified by:
isCellEditable in interface javax.swing.table.TableModel
Overrides:
isCellEditable in class javax.swing.table.AbstractTableModel

addSharePath

public void addSharePath(java.io.File file)

removeSharePath

public void removeSharePath(int index)


javadoc/com/superhac/JXBStreamer/Gui/SplashScreen.html0000644000175000017500000002327610535374265023177 0ustar sjscottsjscott SplashScreen

com.superhac.JXBStreamer.Gui
Class SplashScreen

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.SplashScreen

public class SplashScreen
extends java.lang.Object


Constructor Summary
SplashScreen()
           
 
Method Summary
 javax.swing.JWindow getJWindow()
          This method initializes jWindow
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SplashScreen

public SplashScreen()
Method Detail

getJWindow

public javax.swing.JWindow getJWindow()
This method initializes jWindow

Returns:
javax.swing.JWindow


javadoc/com/superhac/JXBStreamer/Gui/StatusPanel.html0000644000175000017500000002342110535374265023040 0ustar sjscottsjscott StatusPanel

com.superhac.JXBStreamer.Gui
Class StatusPanel

java.lang.Object
  extended by com.superhac.JXBStreamer.Gui.StatusPanel

public class StatusPanel
extends java.lang.Object


Constructor Summary
StatusPanel(XBMSPServer server)
           
 
Method Summary
 javax.swing.JPanel getJPanel()
          This method initializes jPanel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StatusPanel

public StatusPanel(XBMSPServer server)
Method Detail

getJPanel

public javax.swing.JPanel getJPanel()
This method initializes jPanel

Returns:
javax.swing.JPanel


javadoc/com/superhac/JXBStreamer/Gui/package-frame.html0000644000175000017500000000427210535374265023263 0ustar sjscottsjscott com.superhac.JXBStreamer.Gui com.superhac.JXBStreamer.Gui
Classes 
AboutWindow
ConnectionStatusTabMod
DebugWindow
FileTreeModel
Main
MainStatusBar
SaveAndLoadSettings
SettingsWindow
SharePanel
ShareTableModel
SplashScreen
StatusPanel
javadoc/com/superhac/JXBStreamer/Gui/package-summary.html0000644000175000017500000002064710535374265023672 0ustar sjscottsjscott com.superhac.JXBStreamer.Gui

Package com.superhac.JXBStreamer.Gui

Class Summary
AboutWindow  
ConnectionStatusTabMod  
DebugWindow  
FileTreeModel Example of a simple static TreeModel.
Main  
MainStatusBar  
SaveAndLoadSettings  
SettingsWindow  
SharePanel  
ShareTableModel  
SplashScreen  
StatusPanel  
 



javadoc/com/superhac/JXBStreamer/Gui/package-tree.html0000644000175000017500000001776110535374265023137 0ustar sjscottsjscott com.superhac.JXBStreamer.Gui Class Hierarchy

Hierarchy For Package com.superhac.JXBStreamer.Gui

Package Hierarchies:
All Packages

Class Hierarchy



javadoc/com/superhac/JXBStreamer/Gui/class-use/0000755000175000017500000000000010535374265021604 5ustar sjscottsjscottjavadoc/com/superhac/JXBStreamer/Gui/class-use/MainStatusBar.html0000644000175000017500000001333210535374265025211 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.MainStatusBar

Uses of Class
com.superhac.JXBStreamer.Gui.MainStatusBar

No usage of com.superhac.JXBStreamer.Gui.MainStatusBar



javadoc/com/superhac/JXBStreamer/Gui/class-use/SharePanel.html0000644000175000017500000001327410535374265024523 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.SharePanel

Uses of Class
com.superhac.JXBStreamer.Gui.SharePanel

No usage of com.superhac.JXBStreamer.Gui.SharePanel



javadoc/com/superhac/JXBStreamer/Gui/class-use/AboutWindow.html0000644000175000017500000001330610535374265024737 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.AboutWindow

Uses of Class
com.superhac.JXBStreamer.Gui.AboutWindow

No usage of com.superhac.JXBStreamer.Gui.AboutWindow



javadoc/com/superhac/JXBStreamer/Gui/class-use/SettingsWindow.html0000644000175000017500000001334410535374265025467 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.SettingsWindow

Uses of Class
com.superhac.JXBStreamer.Gui.SettingsWindow

No usage of com.superhac.JXBStreamer.Gui.SettingsWindow



javadoc/com/superhac/JXBStreamer/Gui/class-use/SplashScreen.html0000644000175000017500000001332010535374265025063 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.SplashScreen

Uses of Class
com.superhac.JXBStreamer.Gui.SplashScreen

No usage of com.superhac.JXBStreamer.Gui.SplashScreen



javadoc/com/superhac/JXBStreamer/Gui/class-use/Main.html0000644000175000017500000001320010535374265023352 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.Main

Uses of Class
com.superhac.JXBStreamer.Gui.Main

No usage of com.superhac.JXBStreamer.Gui.Main



javadoc/com/superhac/JXBStreamer/Gui/class-use/DebugWindow.html0000644000175000017500000001330610535374265024713 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.DebugWindow

Uses of Class
com.superhac.JXBStreamer.Gui.DebugWindow

No usage of com.superhac.JXBStreamer.Gui.DebugWindow



javadoc/com/superhac/JXBStreamer/Gui/class-use/ShareTableModel.html0000644000175000017500000001335610535374265025475 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.ShareTableModel

Uses of Class
com.superhac.JXBStreamer.Gui.ShareTableModel

No usage of com.superhac.JXBStreamer.Gui.ShareTableModel



javadoc/com/superhac/JXBStreamer/Gui/class-use/StatusPanel.html0000644000175000017500000001330610535374265024740 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.StatusPanel

Uses of Class
com.superhac.JXBStreamer.Gui.StatusPanel

No usage of com.superhac.JXBStreamer.Gui.StatusPanel



javadoc/com/superhac/JXBStreamer/Gui/class-use/FileTreeModel.html0000644000175000017500000001333210535374265025154 0ustar sjscottsjscott Uses of Class com.superhac.JXBStreamer.Gui.FileTreeModel