$ od -c -N 50000 [Indigo]<AltoSource>PUPSOURCES.DM!3
0000000 377 \0 \0 P u p . d e c l \0 373 224 024 027
0000020 026 \0 \0 376 \0 u 243 { / / P u p . d
0000040 e c l \r / / C o p y r i g h t
0000060 X e r o x C o r p o r a t i
0000100 o n 1 9 7 9 \r \r g e t " P u
0000120 p 0 . d e c l " \r g e t " P u
0000140 p 1 . d e c l " \r g e t " P u
0000160 p R T P . d e c l " \r g e t "
0000200 P u p B S P . d e c l " \r 377 \0 \0
0000220 P u p P a r a m s . d e c l \0 373
0000240 225 356 272 272 \0 \0 376 001 \0 005 V / / P u
0000260 p P a r a m s . d e c l - -
0000300 a d j u s t a b l e p a r a m
0000320 e t e r s f o r t h e P u
0000340 p p a c k a g e \r / / C o p
0000360 y r i g h t X e r o x C o r
0000400 p o r a t i o n 1 9 7 9 , 1
0000420 9 8 0 \r / / L a s t m o d i
0000440 f i e d S e p t e m b e r 1
0000460 6 , 1 9 8 0 5 : 1 5 P M
0000500 b y B o g g s \r \r m a n i f
0000520 e s t \r [ \r / / T h e f o l
0000540 l o w i n g p a r a m e t e r
0000560 s d e t e r m i n e t h e
0000600 t y p e a n d n u m b e r \r
0000620 / / o f n e t w o r k i n
0000640 t e r f a c e s \r \r a 376 001 \0 016 ?
0000660 l t o = t r u e \t \t / / C
0000700 o m p i l i n g f o r a n
0000720 A l t o \r n o v a = n o t
0000740 a l t o \t \t / / C o m p i l i
0000760 n g f o r a N o v a \r \r n
0001000 u m A l t o E t h e r = 1 \t
0001020 / / A l t o E t h e r n e t
0001040 ( 0 t o 3 ) \r n u m A l t
0001060 o C o m P r o c = 0 \t / /
0001100 A l t o C o m P r o c ( 0
0001120 o r 1 ) \r n u m A l t o E I A
0001140 = 0 \t \t / / A l t o E I
0001160 A ( 0 o r 1 ) \r n u m A l
0001200 t o I m p = 0 \t \t / / A l
0001220 t o I M P ( A r p a n e t )
0001240 ( 0 o r 1 ) \r n u m A l t
0001260 376 001 \0 205 240 o P R U = 0 \t \t /
0001300 / A l t o P R U ( P a c k
0001320 e t r a d i o ) ( 0 o r
0001340 1 ) \r \r n u m N o v a E t h e r
0001360 = 0 \t / / N o v a E t h
0001400 e r n e t ( 0 t o 3 ) \r n
0001420 u m N o v a M C A = 0 \t \t /
0001440 / N o v a M C A ( 0 t o
0001460 2 ) \r n u m N o v a I m p =
0001500 0 \t \t / / N o v a I m p
0001520 ( A r p a n e t ) ( 0 o r
0001540 1 ) \r n u m N o v a S L A =
0001560 0 \t \t / / N o v a S L A (
0001600 0 o r 1 ) \r \r / / T h i s
0001620 d e r i v e d p a r a m e t
0001640 e r g o v e r n s i n c l u
0001660 s i o n 376 001 \0 8 . o f l o g
0001700 i c f o r h a n d l i n g \r
0001720 / / m u l t i p l e c o n n
0001740 e c t e d n e t w o r k s . \r
0001760 \r m u l t i p l e N e t s =
0002000 ( n u m A l t o E t h e r +
0002020 n u m A l t o E I A + n u m
0002040 A l t o I m p + n u m A l t
0002060 o P R U + \r n u m A l t o C
0002100 o m P r o c + n u m N o v a
0002120 E t h e r + n u m N o v a M
0002140 C A + n u m N o v a I m p
0002160 + n u m N o v a S L A ) g r
0002200 1 \r \r \r / / M a x i m u m
0002220 n u m b e r o f d a t a (
0002240 c o n t e n t ) b y t e s p
0002260 e r P u p . \r / / 376 001 \0 330 004
0002300 M u s t b e e v e n , a n
0002320 d b y c o n v e n t i o n
0002340 s h o u l d n o t b e g r
0002360 e a t e r t h a n 5 3 2 . \r
0002400 \r d e f a u l t P u p D a t a B
0002420 y t e s = 5 3 2 \r \r \r / /
0002440 S t a c k s i z e f o r e
0002460 a c h R T P / B S P p r o c
0002500 e s s \r / / M u s t b e i
0002520 n c r e a s e d i f a u s
0002540 e r " o t h e r p r o t o c
0002560 o l " p a c k e t h a n d l
0002600 e r \r / / r e q u i r e s a
0002620 l o t o f s t a c k s p
0002640 a c e . \r \r d e f a u l t R T P
0002660 S t a c k S i z e = 1 4 0 376
0002700 001 \0 230 C \r \r \r / / D e f a u l
0002720 t e r r o r t i m e o u t
0002740 i n t e r v a l f o r R T P
0002760 / B S P i n t e r a c t i o n
0003000 s \r \r d e f a u l t D e f a u l
0003020 t T i m e o u t = 6 0 0 0
0003040 / / 6 0 s e c o n d s (
0003060 u n i t s a r e 1 0 m s )
0003100 \r \r \r / / I f P u p D e b u
0003120 g i s t r u e , a n u m
0003140 b e r o f e x t r a c o n
0003160 s i s t e n c y c h e c k s \r
0003200 / / a r e c o m p i l e d ,
0003220 a n d s o m e s t a t i s
0003240 t i c s a r e g a t h e r e
0003260 d : \r / / T h i n g s g e t
0003300 b i g 376 \0 $ x 201 g e r a n d
0003320 s l o w e r . \r \r p u p D e b
0003340 u g = f a l s e \r ] \r 377 \0 \0
0003360 P u p B S P . d e c l \0 373 231 005 203
0003400 E \0 \0 376 001 \0 q 200 / / P u p B S
0003420 P . d e c l - - B y t e S
0003440 t r e a m P r o t o c o l d
0003460 e f i n i t i o n s \r / / C o
0003500 p y r i g h t X e r o x C o
0003520 r p o r a t i o n 1 9 7 9 ,
0003540 1 9 8 2 \r \r / / L a s t m o
0003560 d i f i e d M a y 9 , 1 9
0003600 8 2 1 : 0 1 P M b y T
0003620 a f t \r \r / / P u p 0 . d e c
0003640 l , P u p 1 . d e c l , a n
0003660 d P u p R T P . d e c l m u
0003700 s t b e c o m p i l e d b
0003720 e f o r e t h i s . \r \r g e t
0003740 " S t r e a m s . d " \r \r / /
0003760 - - - - - - - - - - - - - - - -
0004000 - - - - - - - - 376 001 \0 \f 356 - - -
0004020 - - - - - - - - - - - - - - - -
*
0004100 - \r s t r u c t u r e B S P S
0004120 t r : \t / / B S P S t r e a
0004140 m b l o c k ( p a r a l l e
0004160 l s P u p B S P a . a s m ) \r
0004200 / / - - - - - - - - - - - - - -
0004220 - - - - - - - - - - - - - - - -
*
0004300 - - - - - - - - - - - - - - \r [
0004320 \r @ S T \t \t \t / / A s t a n
0004340 d a r d O S s t r e a m \r i
0004360 P B I w o r d \t \t / / c u r
0004400 r e n t i n p u t b u 376 001 \0
0004420 a 242 f f e r . 0 i f n o n
0004440 e \r i W o r d P w o r d \t \t /
0004460 / - > w o r d c o n t a i
0004500 n i n g n e x t b y t e \r i
0004520 B y t e P w o r d \t \t / / N
0004540 e x t b y t e p o s . 0
0004560 = l e f t , 1 = r i g
0004600 h t \r i B y t e C w o r d \t \t
0004620 / / r e m a i n i n g i n p
0004640 u t b y t e c o u n t \r o P
0004660 B I w o r d \t \t / / c u r r
0004700 e n t o u t p u t b u f f e
0004720 r . 0 i f n o n e \r o W o
0004740 r d P w o r d \t \t / / - >
0004760 w o r d c o n t a i n i n g
0005000 n e x t b y t e \r o B y t e P
0005020 w 376 001 \0 7 Z o r d \t \t / / N
0005040 e x t b y t e p o s . 0
0005060 = l e f t , 1 = r i g
0005100 h t \r o B y t e C w o r d \t \t
0005120 / / r e m a i n i n g o u t
0005140 p u t b y t e c o u n t \r ]
0005160 \r m a n i f e s t l e n B S P
0005200 S t r = s i z e B S P S t
0005220 r / 1 6 \r \r c o m p i l e i f
0005240 o f f s e t B S P S t r . i P
0005260 B I / 1 6 n e 1 2 t h e n
0005300 \r [ B a r f ( " B S P S
0005320 t r s t r u c t u r e d i s
0005340 a g r e e s w i t h a s s u
0005360 m p t i o n s i n P u p B S
0005400 P a . a s m " ) ] \r \r / / I
0005420 n v a r i a n 376 001 \0 z 031 t : i
0005440 B y t e C = 0 i f f i P B I
0005460 = 0 , o B y t e C = 0 i f f
0005500 o P B I = 0 \r \f \r / / - - - -
0005520 - - - - - - - - - - - - - - - -
*
0005620 - - - - - - - - \r s t r u c t u
0005640 r e B S P S o c : \r / / - - -
0005660 - - - - - - - - - - - - - - - -
*
0005760 - - - - - - - - - \r [ \r @ R T P
0006000 S o c = \r [ \r b l
0006020 a n k w o r d o f f 376 001 \0 360
0006040 362 s e t R T P S o c . r t p O
0006060 t h e r P u p P r o c / 1 6 \r
0006100 b s p P u p P r o c w o r
0006120 d \t / / l o c a l n a m e
0006140 f o r r t p O t h e r P u p P
0006160 r o c \r b s p T i m e r
0006200 w o r d \t / / l o c a l n a
0006220 m e f o r r t p O t h e r T
0006240 i m e r \r b s p T i m e r
0006260 P r o c w o r d \t / / l o c
0006300 a l n a m e f o r r t p O
0006320 t h e r T i m e r P r o c \r
0006340 ] \r b s p O t h e r P u p P r
0006360 o c w o r d \t / / p r o c
0006400 c a l l e d f o r n o n - R
0006420 T P a n d n o n - B S P p
0006440 u 376 001 \0 237 - p s \r u s e r B y t
0006460 e I D ^ 1 , 2 w o r d \t / /
0006500 I D o f p a c k e t w e
0006520 a r e w o r k i n g o n \r r
0006540 c v B y t e I D ^ 1 , 2 w o r
0006560 d \t / / f i r s t b y t e
0006600 b e y o n d w h a t I h a
0006620 v e a c k e d \r r c v I n t I
0006640 D ^ 1 , 2 w o r d \t / / I D
0006660 o f n e x t i n c o m i n
0006700 g i n t e r r u p t \r u n R e
0006720 a d P u p s w o r d \t \t / /
0006740 P u p s f r o m l e f t w
0006760 i n d o w e d g e t o f i
0007000 r s t h o l e \r b s p I Q : \t
0007020 \t \t / / d a t a a n d m a
0007040 r k p u p 376 001 \0 o 341 s f o r
0007060 l o c a l p r o c e s s \r
0007100 [ \r h e a d w o r d
0007120 \r t a i l w o r d \r
0007140 ] \r x m i t B y t e I D ^ 1 ,
0007160 2 w o r d \t / / I D o f
0007200 n e x t o u t g o i n g p a
0007220 c k e t c r e a t e d \r x m i
0007240 t I n t I D ^ 1 , 2 w o r d \t
0007260 / / I D o f n e x t o u
0007300 t g o i n g i n t e r r u p t
0007320 \r l a s t A c k I D ^ 1 , 2 w
0007340 o r d \t / / I D o f l a s
0007360 t r e c e i v e d a c k \r u
0007400 n A c k e d P u p s w o r d \t
0007420 / / o u t s t a n d i n g a
0007440 n d u n a c k n o w 376 001 \0 026 375
0007460 l e d g e d P u p s \r u n A c
0007500 k e d B y t e s w o r d \t / /
0007520 o u t s t a n d i n g a n d
0007540 u n a c k n o w l e d g e d
0007560 b y t e s \r b y t e s P e r P u
0007600 p w o r d \r p u p A l l o c
0007620 w o r d \t \t / / r e m a i n i
0007640 n g o u t g o i n g P u p
0007660 a l l o c a t i o n \r b y t e A
0007700 l l o c w o r d \t \t / / r e
0007720 m a i n i n g o u t g o i n g
0007740 b y t e a l l o c a t i o n
0007760 \r m a x P u p A l l o c w o r
0010000 d \t / / u p p e r b o u n d
0010020 o n p u p A l l o c \r p u p
0010040 A l l o c C o u n t w o r d \t
0010060 376 001 \0 v 260 / / c o u n t e r
0010100 c o n t r o l l i n g c h a n
0010120 g e s t o m a x P u p A l l
0010140 o c \r a D a t a C o u n t w o
0010160 r d \t \t / / c o u n t e r i
0010200 n c r e m e n t e d o n c e
0010220 p e r A D a t a s e n t \r l
0010240 a s t A D a t a T i m e w o r
0010260 d \t / / t i m e a t w h i
0010300 c h l a s t A D a t a w a
0010320 s s e n t \r a D a t a T i m e
0010340 o u t w o r d \t / / A D a t
0010360 a t i m e o u t i n t e r v
0010400 a l n o w b e i n g u s e
0010420 d \r i n a c t i v i t y T i m e
0010440 r w o r d \t / / c o n n e c
0010460 t i o n 376 001 \0 265 216 i n a c t i
0010500 v i t y t i m e r \r b s p T Q
0010520 : \t \t \t / / p u p s a w a i
0010540 t i n g a c k n o w l e d g e
0010560 m e n t \r [ \r h e a
0010600 d w o r d \r t a i l w
0010620 o r d \r ] \r b s p S t a t
0010640 u s w o r d = \r [ \r
0010660 m a r k P e n d i n g b i
0010700 t \t / / e n c o u n t e r e d
0010720 M a r k i n s t r e a m \r
0010740 i n t e r r u p t O u t
0010760 b i t \t / / u n a c k n o w l
0011000 e d g e d I n t e r r u p t
0011020 o u t s t a n d i n g \r i
0011040 n t e r r u p t I n b i t \t /
0011060 / I n t e r r u p 376 001 \0 316 240 t
0011100 r e c e i v e d \r a c k
0011120 P e n d i n g b i t \t / / A
0011140 D a t a r e c e i v e d , n
0011160 e e d t o s e n d A c k \r
0011200 a c k R e q u e s t e d
0011220 b i t \t / / A D a t a s e n
0011240 t , e x p e c t i n g A c k
0011260 \r s e n t Z e r o A l l o
0011300 c b i t \t / / n e e d t o
0011320 s e n d g r a t u i t o u s
0011340 A c k \r n o I n a c t i
0011360 v i t y T i m e o u t b i t
0011400 / / d o n ' t a b o r t
0011420 u p o n i n a c t i v i t y
0011440 t i m e o u t \r ] \r b s p
0011460 S t r w o r d l e n B S P 376
0011500 001 \0 326 " S t r = @ B S P S t
0011520 r \r ] \r m a n i f e s t l e n
0011540 B S P S o c = s i z e B S
0011560 P S o c / 1 6 \r \f \r m a n i f e
0011600 s t \r [ \r / / B y t e S t r
0011620 e a m P r o t o c o l P u p
0011640 t y p e s \r t y p e D a t a
0011660 = # 2 0 \r t y p e A D a t a
0011700 = # 2 1 \r t y p e A c k =
0011720 # 2 2 \r t y p e M a r k = #
0011740 2 3 \r t y p e A M a r k = #
0011760 2 6 \r t y p e I n t e r r u p t
0012000 = # 2 4 \r t y p e I n t e r
0012020 r u p t R e p l y = # 2 5 \r
0012040 \r / / E r r o r c o d e s
0012060 f o r B S P s t r e a m s \r
0012100 e c B a 376 001 \0 304 q d S t a t e F
0012120 o r G e t s = 2 2 0 0 \r e c
0012140 G e t s T i m e o u t = 2 2
0012160 0 1 \r e c M a r k E n c o u n t
0012200 e r e d = 2 2 0 2 \r e c B a
0012220 d S t a t e F o r P u t s =
0012240 2 2 0 3 \r e c P u t s T i m e o
0012260 u t = 2 2 0 4 \r e c B a d B
0012300 S P G e t M a r k = 2 2 0 5
0012320 \r \r / / t i m e o u t i n t
0012340 e r v a l s \r \r / / i n i t i
0012360 a l v a l u e o f a D a t
0012400 a T i m e o u t \r / / = t i
0012420 m e t o w a i t a f t e r
0012440 s e n d i n g A D a t a b
0012460 e f o r e r e p r o b i n g \r
0012500 i n i t i a l A D 376 001 \0 a p a t
0012520 a T i m e o u t = 1 0 0 \r \r
0012540 / / m a x i m u m t i m e
0012560 a f t e r s e n d i n g D a
0012600 t a b e f o r e e l i c i t
0012620 i n g A c k \r o u t s t a n d
0012640 i n g D a t a T i m e o u t =
0012660 1 0 0 \r \r / / t i m e o u t
0012700 t o u s e w h e n n o
0012720 p a c k e t s a r e o u t s
0012740 t a n d i n g \r i d l e T i m e
0012760 o u t = 1 5 0 0 \r \r / / i
0013000 n a c t i v i t y t i m e o u
0013020 t , e x p i r a t i o n o f
0013040 w h i c h c a u s e s c o
0013060 n n e c t i o n t o b e a
0013100 b o r t e d \r i n a c t i v 376 001
0013120 \0 \v F i t y T i m e o u t =
0013140 1 2 0 0 0 \r \r / / w h e n e v
0013160 e r p u p A l l o c H y s t e
0013200 r e s i s o u t g o i n g P
0013220 u p s h a v e b e e n s u
0013240 c c e s s f u l l y \r / / a c
0013260 k n o w l e d g e d w i t h
0013300 n o c o n g e s t i o n e r
0013320 r o r s , a t t e m p t t o
0013340 i n c r e a s e \r / / t h e
0013360 o u t g o i n g P u p a l
0013400 l o c a t i o n ( m a x P u p
0013420 A l l o c ) . \r p u p A l l o c
0013440 H y s t e r e s i s = 5 0 \r
0013460 \r / / i n i t i a l m a x i
0013500 m u m P u p a l l o c a t i
0013520 o n 376 \0 n 352 375 t h a t t h e
0013540 s e n d e r w i l l u s e
0013560 , r e g a r d l e s s \r / /
0013600 o f t h e a l l o c a t i o
0013620 n p r o v i d e d b y t h
0013640 e r e c e i v e r . \r i n i t
0013660 i a l M a x P u p A l l o c =
0013700 5 \r ] \r \r 377 \0 \0 P u p B S P O
0013720 p e n C l o s e . b c p l \0 373 230
0013740 \b 261 032 \0 \0 376 001 \0 351 341 / / P u p
0013760 B S P O p e n C l o s e . b c p
0014000 l - - B y t e S t r e a m
0014020 P r o t o c o l \r / / C o m
0014040 p a n i o n f i l e s a r e
0014060 P u p B S P P r o t , P u p
0014100 B S P S t r e a m s a n d P
0014120 u p B S P a \r / / T h i s m
0014140 o d u l e c o n t a i n s i
0014160 n f r e q u e n t l y e x e c
0014200 u t e d c o d e w h i c h
0014220 c a n s w a p \r / / w i t
0014240 h o u t a f f e c t i n g p
0014260 e r f o r m a n c e . \r / / C
0014300 o p y r i g h t X e r o x C
0014320 o r p o r a t i o n 1 9 7 9 ,
0014340 1 9 8 0 , 1 9 8 376 001 \0 k 304 1
0014360 \r / / L a s t m o d i f i e
0014400 d O c t o b e r 2 9 , 1 9
0014420 8 1 5 : 2 2 P M b y T
0014440 a f t \r \r g e t " P u p . d e
0014460 c l " \r g e t " P u p R T P I
0014500 n t e r n a l . d e c l " \r \r e
0014520 x t e r n a l \r [ \r / / o u t
0014540 g o i n g p r o c e d u r e s
0014560 \r C r e a t e B S P S t r e a m
0014600 ; C l o s e B S P S o c k e t
0014620 ; B S P P u t I n t e r r u p
0014640 t ; B S P H a n d l e U n c o
0014660 m m o n P u p \r \r / / i n c o
0014700 m i n g p r o c e d u r e s \r
0014720 B S P P u p P r o c ; B S P T
0014740 i m e r P r o c ; B S P F o 376
0014760 001 \0 301 R r c e O u t p u t ; B
0015000 S P P r e p a r e I P B I ; B
0015020 S P G e t C l e a n u p \r B S P
0015040 G e t B y t e ; B S P P u t B
0015060 y t e ; B S P E n d o f s ;
0015100 B S P E r r o r s ; B S P C l
0015120 o s e s ; S e a r c h T Q \r C
0015140 l o s e R T P S o c k e t ; R
0015160 T P F i l t e r ; R T P F S M
0015200 ; C l o s e L e v e l 1 S o c
0015220 k e t ; S e t T i m e o u t \r
0015240 R e l e a s e P B I ; G e t P
0015260 B I ; C o m p l e t e P u p ;
0015300 S e t P u p I D ; A p p e n
0015320 d S t r i n g T o P u p ; M u
0015340 l t E q \r N o o p ; Z e r o ;
0015360 S e t 376 001 \0 326 . B l o c k ;
0015400 M o v e B l o c k ; S y s E r
0015420 r ; D o u b l e I n c r e m e
0015440 n t ; D o u b l e D i f f e r
0015460 e n c e \r S e t T i m e r ; T
0015500 i m e r H a s E x p i r e d ;
0015520 B l o c k ; D i s m i s s ;
0015540 M i n \r F l u s h Q u e u e \r \r
0015560 / / o u t g o i n g s t a t
0015600 i c s \r l B S P S o c ; o f f
0015620 s e t B S P S t r \r \r / / i n
0015640 c o m i n g s t a t i c s \r d
0015660 e f a u l t T i m e o u t \r ] \r
0015700 \r s t a t i c \r [ \r l B S P S o
0015720 c = l e n B S P S o c \r o f
0015740 f s e t B S P S t r = o f f
0015760 s e t B S P S o 376 001 \0 343 v c .
0016000 b s p S t r / 1 6 \r ] \r \r / / -
0016020 - - - - - - - - - - - - - - - -
*
0016120 - - - - - - - - - - - \r l e t
0016140 C r e a t e B S P S t r e a m (
0016160 s o c ) = v a l o f \r / / -
0016200 - - - - - - - - - - - - - - - -
*
0016300 - - - - - - - - - - - \r [ \r / /
0016320 i n i t i a l i z e B S P
0016340 s o c k e t \r u n l e s s s o
0016360 c > > B S P S o c . s t a t 376 001
0016400 \0 277 375 e e q s t a t e O p e
0016420 n % s o c > > B S P S o c .
0016440 s t a t e e q s t a t e E n
0016460 d I n d o \r r e s u l t
0016500 i s 0 \r Z e r o ( s o c + l e
0016520 n R T P S o c , l e n B S P S
0016540 o c - l e n R T P S o c ) \r f o
0016560 r i = 0 t o 5 d o \r
0016600 M o v e B l o c k ( s o c
0016620 + ( t a b l e \r
0016640 [ \r o f f s e t B
0016660 S P S o c . u s e r B y t e I D
0016700 / 1 6 \r o f f s e t
0016720 B S P S o c . r c v B y t e I
0016740 D / 1 6 \r o f f s e
0016760 t B S P S o c . r c v I n t I
0017000 D / 1 376 001 \0 K 362 6 \r
0017020 o f f s e t B S P S o c . x m
0017040 i t I n t I D / 1 6 \r
0017060 o f f s e t B S P S o c . x
0017100 m i t B y t e I D / 1 6 \r
0017120 o f f s e t B S P S o c
0017140 . l a s t A c k I D / 1 6 \r
0017160 ] ) ! i , l v s o c
0017200 > > B S P S o c . c o n n I D ,
0017220 2 ) \r S e t T i m e r ( l v
0017240 s o c > > B S P S o c . b s p T
0017260 i m e r , 0 ) \r S e t T i m e
0017300 r ( l v s o c > > B S P S o c
0017320 . i n a c t i v i t y T i m e r
0017340 , i n a c t i v i t y T i m e
0017360 o u t ) \r s o c > > B S P S o c
0017400 . b s p O t h e 376 001 \0 303 254 r P u
0017420 p P r o c = s o c > > B S P
0017440 S o c . b s p P u p P r o c \r s
0017460 o c > > B S P S o c . b s p P u
0017500 p P r o c = B S P P u p P r
0017520 o c \r s o c > > B S P S o c . b
0017540 s p T i m e r P r o c = B S
0017560 P T i m e r P r o c \r s o c > >
0017600 B S P S o c . a D a t a T i m e
0017620 o u t = i n i t i a l A D a
0017640 t a T i m e o u t \r s o c > > B
0017660 S P S o c . m a x P u p A l l o
0017700 c = M i n ( s o c > > B S P
0017720 S o c . m a x O P B I , i n i
0017740 t i a l M a x P u p A l l o c )
0017760 \r \r / / i n i t i a l i z e
0020000 B S P s t r e a m \r l e 376 001 \0
0020020 322 \v t s t r = s o c + o f
0020040 f s e t B S P S t r \r S e t B l
0020060 o c k ( s t r , S y s E r r ,
0020100 l S T ) \r s t r > > B S P S t
0020120 r . g e t s = B S P G e t B
0020140 y t e \r s t r > > B S P S t r .
0020160 p u t s = B S P P u t B y t
0020200 e \r s t r > > B S P S t r . c l
0020220 o s e = B S P C l o s e s \r
0020240 s t r > > B S P S t r . e n d o
0020260 f = B S P E n d o f s \r s t
0020300 r > > B S P S t r . e r r o r
0020320 = B S P E r r o r s \r \r r e s
0020340 u l t i s s t r \r ] \r \f \r / /
0020360 - - - - - - - - - - - - - - - -
*
0020420 - - 376 001 \0 335 261 - - - - - - - - -
0020440 - - - - - - - - - - - - - - - -
*
0020500 - \r a n d C l o s e B S P S o
0020520 c k e t ( s o c , t i m e o u
0020540 t ; n u m a r g s n a ) =
0020560 v a l o f \r / / - - - - - - -
0020600 - - - - - - - - - - - - - - - -
*
0020700 - - - - - \r [ \r i f n a l e
0020720 1 t h e n t i m e o u t
0020740 = d e f a u l t T i m e o u t
0020760 \r i f s o c > > B S P S o c .
0021000 s t a t e e q s t a t e O p
0021020 e n % s o 376 001 \0 001 203 c > > B
0021040 S P S o c . s t a t e e q s
0021060 t a t e E n d I n t h e n \r
0021100 [ / / w a i t t i l
0021120 a l l q u e u e d o u t p
0021140 u t h a s b e e n a c k n
0021160 o w l e d g e d \r B S P F
0021200 o r c e O u t p u t ( s o c ) \r
0021220 l e t t i m e r = n
0021240 i l ; S e t T i m e r ( l v
0021260 t i m e r , t i m e o u t ) \r
0021300 w h i l e s o c > > B S
0021320 P S o c . u n A c k e d P u p s
0021340 n e 0 % s o c > > B S P
0021360 S o c . i n t e r r u p t O u t
0021400 d o \r [ \r
0021420 B S P F l u s h I n 376 001 \0 K
0021440 A p u t ( s o c ) / / f l
0021460 u s h w a i t i n g i n p u
0021500 t \r s w i t c h o n
0021520 s o c > > B S P S o c . s t a
0021540 t e i n t o \r
0021560 [ \r c a s e
0021600 s t a t e O p e n : c a s e
0021620 s t a t e E n d I n : \r
0021640 u n l e s s
0021660 T i m e r H a s E x p i r e d (
0021700 l v t i m e r ) e n d c a s
0021720 e \r d e f a u
0021740 l t : \r
0021760 t i m e o u t = 0 ; b r e
0022000 a k / / t i m e d o u t
0022020 o r a b o r t e d \r
0022040 376 001 \0 204 E ] \r
0022060 D i s m i s s ( 1 ) \r
0022100 ] \r ] \r \r / / c l
0022120 o s e t h e s o c k e t ,
0022140 f l u s h i n g B S P i n p
0022160 u t w h i l e w a i t i n g
0022200 \r s o c > > B S P S o c . b s p
0022220 T i m e r P r o c = B S P I
0022240 n p u t S u c k e r U p p e r \r
0022260 B S P I n p u t S u c k e r U p
0022300 p e r ( s o c ) \r t i m e o u t
0022320 = C l o s e R T P S o c k e
0022340 t ( s o c , t i m e o u t ) \r
0022360 \r / / w a i t t i l a l l
0022400 o w n e d p b i ' s h a v
0022420 e r e t u r n e d b e f o r
0022440 e d e s t 376 001 \0 l 227 r o y i n
0022460 g s o c k e t \r s o c > > B S
0022500 P S o c . b s p P u p P r o c
0022520 = R e l e a s e P B I / /
0022540 t u r n o f f i n p u t \r
0022560 s o c > > B S P S o c . b s p T
0022600 i m e r P r o c = N o o p \r
0022620 i f s o c > > B S P S o c . o
0022640 P B I n e 0 t h e n R e
0022660 l e a s e P B I ( s o c > > B S
0022700 P S o c . o P B I ) \r w h i l e
0022720 s o c > > B S P S o c . n u m
0022740 O P B I n e s o c > > B S P
0022760 S o c . m a x O P B I d o \r
0023000 [ F l u s h Q u e u e ( l
0023020 v s o c > > B S P S o c . b s
0023040 p T Q ) ; D i s m i 376 001 \0 245 305
0023060 s s ( 1 ) ] \r F l u s h Q u e
0023100 u e ( l v s o c > > B S P S o
0023120 c . b s p I Q ) \r C l o s e L e
0023140 v e l 1 S o c k e t ( s o c ) \r
0023160 r e s u l t i s t i m e o u t
0023200 n e 0 \r ] \r \r / / - - - - -
0023220 - - - - - - - - - - - - - - - -
*
0023320 - - - - - - \r a n d B S P F l
0023340 u s h I n p u t ( s o c ) b e
0023360 \r / / - - - - - - - - - - - - -
0023400 - - - - - - - - - - - - - - - -
*
0023460 376 001 \0 335 : - - - - - - - - - - -
0023500 - - - \r / / c a l l e d v i
0023520 a B S P T i m e r P r o c e
0023540 n t r y t o f l u s h i n
0023560 p u t d u r i n g R T P c
0023600 l o s e \r [ \r l e t e c =
0023620 B S P P r e p a r e I P B I ( s
0023640 o c , 0 ) \r u n l e s s e c
0023660 e q 0 % e c e q e c
0023700 M a r k E n c o u n t e r e d
0023720 r e t u r n \r B S P G e t C l e
0023740 a n u p ( s o c ) \r ] r e p e
0023760 a t \r \r / / - - - - - - - - - -
0024000 - - - - - - - - - - - - - - - -
*
0024060 - - - - - 376 001 \0 " 271 - - - - - -
0024100 - - - - - - \r a n d B S P I n
0024120 p u t S u c k e r U p p e r ( s
0024140 o c ) b e \r / / - - - - - - -
0024160 - - - - - - - - - - - - - - - -
*
0024260 - - - - \r / / c a l l e d v
0024300 i a B S P T i m e r P r o c
0024320 e n t r y t o f l u s h i
0024340 n p u t d u r i n g R T P
0024360 c l o s e \r [ \r B S P F l u s h
0024400 I n p u t ( s o c ) \r S e t T i
0024420 m e r ( l v s o c > > B S P S
0024440 o c . b s p T i m e r , 1 0 )
0024460 \r ] \r \f \r / / - - - 376 001 \0 5 255 -
0024500 - - - - - - - - - - - - - - - -
*
0024600 - - - - - - - \r a n d B S P P
0024620 u t I n t e r r u p t ( s o c ,
0024640 c o d e , s t r i n g , t
0024660 i m e o u t ; n u m a r g s
0024700 n a ) = v a l o f \r / / - -
0024720 - - - - - - - - - - - - - - - -
*
0025020 - - - - - - - - - \r [ \r i f n
0025040 a l s 4 t h e n t i m e
0025060 o u t = - 1 \r l e t t i 376
0025100 001 \0 351 c m e r = n i l ; S
0025120 e t T i m e r ( l v t i m e r
0025140 , t i m e o u t ) \r [ \r
0025160 s w i t c h o n s o c >
0025200 > B S P S o c . s t a t e i n
0025220 t o \r [ \r
0025240 c a s e s t a t e O p e n :
0025260 c a s e s t a t e E n d I n
0025300 : \r u n l e s
0025320 s t i m e o u t g e 0 &
0025340 T i m e r H a s E x p i r e d
0025360 ( l v t i m e r ) e n d c a
0025400 s e \r d e f a u l t
0025420 : \r r e s u l
0025440 t i s f a l s e / / b a
0025460 d s t a t e o r t i m e d
0025500 o u t 376 001 \0 326 q \r
0025520 ] \r i f s o c > > B S P
0025540 S o c . n u m T P B I n e 0
0025560 & s o c > > B S P S o c . n
0025600 u m O P B I n e 0 & \r
0025620 n o t s o c > > B S P
0025640 S o c . i n t e r r u p t O u t
0025660 t h e n b r e a k \r B
0025700 l o c k ( ) \r ] r e p e
0025720 a t \r \r l e t p b i = G e
0025740 t P B I ( s o c ) \r p b i > > P
0025760 B I . p u p . w o r d s ^ 1 =
0026000 c o d e \r A p p e n d S t r i
0026020 n g T o P u p ( p b i , 3 ,
0026040 s t r i n g ) \r S e t P u p I D
0026060 ( p b i , l v s o c > > B S
0026100 P S o c . x m i t 376 001 \0 262 351 I n
0026120 t I D ) \r p b i > > P B I . q u
0026140 e u e = l v s o c > > B S
0026160 P S o c . b s p T Q / / k
0026200 e e p p b i a r o u n d \r C
0026220 o m p l e t e P u p ( p b i ,
0026240 t y p e I n t e r r u p t ) \r s
0026260 o c > > B S P S o c . i n t e r
0026300 r u p t O u t = t r u e \r S
0026320 e t T i m e o u t ( s o c ) \r r
0026340 e s u l t i s t r u e \r ] \r \f
0026360 \r / / - - - - - - - - - - - - -
0026400 - - - - - - - - - - - - - - - -
*
0026460 - - - - - - - - - - - - - - \r a
0026500 n d B S P H a n d l e U n 376 001
0026520 \0 + 2 c o m m o n P u p ( s o c
0026540 , p b i ) b e \r / / - - - -
0026560 - - - - - - - - - - - - - - - -
*
0026660 - - - - - - - \r / / C a l l e
0026700 d f r o m B S P P u p P r o
0026720 c f o r I n t e r r u p t ,
0026740 I n t e r r u p t R e p l y ,
0026760 a n d E n d . \r / / A l w
0027000 a y s d i s p o s e s o f
0027020 p b i . \r [ \r l e t p a s s e
0027040 d S o u r c e F i l t e r =
0027060 R T P F i l t e r ( p b i , t
0027100 r u e , f a l s e ) \r s w i t
0027120 c h o 376 001 \0 7 / n p b i > > P
0027140 B I . p u p . t y p e i n t o
0027160 \r [ \r c a s e t y
0027200 p e I n t e r r u p t R e p l y
0027220 : \r i f p a s s e
0027240 d S o u r c e F i l t e r & \r
0027260 M u l t E q ( l v
0027300 p b i > > P B I . p u p . i d
0027320 , l v s o c > > B S P S o c
0027340 . x m i t I n t I D ) & \r
0027360 s o c > > B S P S o c
0027400 . i n t e r r u p t O u t t h
0027420 e n \r [ \r
0027440 l e t n p b i
0027460 = S e a r c h T Q ( s o c ,
0027500 t r u e ) / / F i n d i
0027520 n t e r r u p t 376 001 \0 \r G o n
0027540 T Q \r i f
0027560 n p b i n e 0 t h e n \r
0027600 [ \r
0027620 D o u b l e I
0027640 n c r e m e n t ( l v s o c >
0027660 > B S P S o c . x m i t I n t I
0027700 D , 1 ) \r
0027720 s o c > > B S P S o c . i n
0027740 t e r r u p t O u t = f a l
0027760 s e \r R
0030000 e l e a s e P B I ( n p b i ) \r
0030020 ] \r
0030040 / / I f w e
0030060 c a n ' t f i n d i t , w
0030100 e m u s t b e r e t r a n
0030120 s m i t t i n g i t n 376 001 \0
0030140 / s o w , \r /
0030160 / s o j u s t p r e t e n
0030200 d t h e r e p l y w a s
0030220 l o s t a n d r e l y o n
0030240 t h e \r / /
0030260 r e t r a n s m i s s i o n
0030300 t o e l i c i t a n e w
0030320 r e p l y \r ]
0030340 \r e n d c a s e \r \r
0030360 c a s e t y p e I n t e
0030400 r r u p t : \r i f
0030420 p a s s e d S o u r c e F i l t
0030440 e r t h e n \r
0030460 [ \r l e t
0030500 d = D o u b l e D i f f e r
0030520 e n c e ( l v s o c > > B S P
0030540 S o 376 001 \0 002 255 c . r c v I n t I
0030560 D , \r l v
0030600 p b i > > P B I . p u p . i d )
0030620 \r t e s t d
0030640 e q 0 \r
0030660 i f s o \r
0030700 [ / / T h i s
0030720 i s a n e w i n t e r r
0030740 u p t s o u p d a t e i d
0030760 \r
0031000 D o u b l e I n c r e m e n t (
0031020 l v s o c > > B S P S o c . r
0031040 c v I n t I D , 1 ) \r
0031060 s o c > >
0031100 B S P S o c . i n t e r r u p t
0031120 I n = t r u e \r
0031140 376 001 \0 k 375 ( s
0031160 o c > > B S P S o c . b s p O t
0031200 h e r P u p P r o c ) ( p b i )
0031220 / / p a s s i t o n \r
0031240 ] \r
0031260 i f n o
0031300 t R e l e a s e P B I ( p b i
0031320 ) \r i f d
0031340 u l e 1 t h e n \r
0031360 [ / / G e n
0031400 e r a t e I n t e r r u p t R
0031420 e p l y f o r c a s e s 0
0031440 a n d 1 \r
0031460 p b i = G e t P B I (
0031500 s o c , t r u e ) \r
0031520 i f p b i n e
0031540 0 t h e n \r 376 001 \0 302
0031560 377 [ \r
0031600 S e t
0031620 P u p I D ( p b i , l v s o
0031640 c > > B S P S o c . r c v I n t
0031660 I D ) \r
0031700 D o u b l e I n c r e m e
0031720 n t ( l v p b i > > P B I . p
0031740 u p . i d , - 1 ) \r
0031760 C o m p l e
0032000 t e P u p ( p b i , t y p e I
0032020 n t e r r u p t R e p l y , p
0032040 u p O v B y t e s ) \r
0032060 ] \r
0032100 ] \r
0032120 r e t u r n / / p b
0032140 i a l r e a d y r e l e a s
0032160 e 376 001 \0 ? 331 d \r
0032200 ] \r e n d c a s e
0032220 \r \r c a s e t y p e E n
0032240 d : \r / / A l r e
0032260 a d y f i l t e r e d b y
0032300 R T P . \r / / I f
0032320 s t r e a m i s i d l e
0032340 t h e n c l o s e c o n n e
0032360 c t i o n i m m e d i a t e l
0032400 y ; o t h e r w i s e \r
0032420 / / a w a i t l o c a
0032440 l c l o s e . \r i
0032460 f s o c > > B S P S o c . o P
0032500 B I e q 0 & s o c > > B
0032520 S P S o c . u n A c k e d P u p
0032540 s e q 0 & \r
0032560 n o t s o 376 \0 304 225 t c > > B S
0032600 P S o c . i n t e r r u p t O u
0032620 t & s o c > > B S P S o c .
0032640 u n R e a d P u p s e q 0
0032660 t h e n \r R T
0032700 P F S M ( s o c , C L S N ) \r
0032720 e n d c a s e \r
0032740 ] \r \r / / a b o v e
0032760 c o d e s h o u l d r e t u
0033000 r n b e f o r e h e r e i
0033020 f p b i i s a l r e a d y
0033040 d i s p o s e d o f \r R e l
0033060 e a s e P B I ( p b i ) \r ] \r 377
0033100 \0 \0 P u p B S P S t r e a m s .
0033120 b c p l \0 373 230 375 207 366 \0 \0 376 001 \0 371
0033140 345 / / P u p B S P S t r e a m
0033160 s . b c p l - - B y t e S
0033200 t r e a m P r o t o c o l \r /
0033220 / C o m p a n i o n f i l e
0033240 s a r e P u p B S P O p e n
0033260 C l o s e , P u p B S P P r o
0033300 t a n d P u p B S P a \r / /
0033320 T h i s m o d u l e c o n
0033340 t a i n s t h e ' m a i n
0033360 l i n e ' c o d e . \r / / C
0033400 o p y r i g h t X e r o x C
0033420 o r p o r a t i o n 1 9 7 9 ,
0033440 1 9 8 0 , 1 9 8 1 , 1 9 8
0033460 2 \r / / L a s t m o d i f i
0033500 e d M a y 3 , 1 9 8 2
0033520 1 1 : 3 2 A M b y T a f t
0033540 \r 376 001 \0 7 6 \r g e t " P u p .
0033560 d e c l " \r \r e x t e r n a l \r
0033600 [ \r / / o u t g o i n g p r
0033620 o c e d u r e s \r B S P G e t B
0033640 y t e ; B S P P r e p a r e I
0033660 P B I ; B S P G e t C l e a n
0033700 u p ; B S P G e t M a r k \r B
0033720 S P P u t B y t e ; B S P P r
0033740 e p a r e O P B I ; B S P F o
0033760 r c e O u t p u t ; B S P P u
0034000 t M a r k \r B S P C l o s e s ;
0034020 B S P E n d o f s ; B S P E
0034040 r r o r s \r \r / / i n c o m i
0034060 n g p r o c e d u r e s \r B S
0034100 P G e t s ; B S P P u t s ;
0034120 C l o s e B S P S o c k e t \r S
0034140 e n d A c k 376 001 \0 \t 375 ; T r a
0034160 n s m i t S t r a t e g y ; S
0034200 e t T i m e o u t \r R e l e a s
0034220 e P B I ; G e t P B I ; C o
0034240 m p l e t e P u p ; S e t P u
0034260 p I D \r Z e r o ; M o v e B l
0034300 o c k ; C a l l S w a t ; S
0034320 y s E r r ; G e t s ; P u t
0034340 s ; E r r o r s \r D o u b l e
0034360 I n c r e m e n t ; S e t T i
0034400 m e r ; T i m e r H a s E x p
0034420 i r e d ; B l o c k \r E n q u
0034440 e u e ; D e q u e u e ; M i
0034460 n \r \r / / o u t g o i n g s
0034500 t a t i c s \r b s p V e r s i o
0034520 n \r \r / / i n c o m i n g s
0034540 t a t i c s \r o f f s 376 001 \0 325 226
0034560 e t B S P S t r \r ] \r \r s t a t
0034600 i c [ b s p V e r s i o n
0034620 = 1 0 1 1 ] / / p r o t
0034640 o c o l a n d p a c k a g e
0034660 v e r s i o n s \r \r \r / / - -
0034700 - - - - - - - - - - - - - - - -
*
0035000 - - - - - - - - - \r l e t B S
0035020 P C l o s e s ( s t r ) = C
0035040 l o s e B S P S o c k e t ( s t
0035060 r - o f f s e t B S P S t r ) \r
0035100 / / - - - - - - - - - - - - - -
0035120 - - - - - - - - - - - - - - - -
*
0035160 376 001 \0 ^ 361 - - - - - - - - - - -
0035200 - - - - - - - - - - - - - - - -
0035220 - - \r \r \r / / - - - - - - - - -
0035240 - - - - - - - - - - - - - - - -
*
0035340 - - - \r a n d B S P E r r o r
0035360 s ( s t r , e c ) = / /
0035400 d e f a u l t B S P s t r e
0035420 a m e r r o r h a n d l e r
0035440 \r / / - - - - - - - - - - - - -
0035460 - - - - - - - - - - - - - - - -
*
0035540 - - - - - - - - - - - - - - - \r
0035560 s e l e c 376 001 \0 g ` t o n e c
0035600 i n t o \r [ \r c a
0035620 s e e c B a d S t a t e F o r
0035640 G e t s : \r c a s e e c
0035660 G e t s T i m e o u t : \r
0035700 c a s e e c M a r k E n c o u
0035720 n t e r e d : \r - 1
0035740 \r c a s e e c B a d S t
0035760 a t e F o r P u t s : \r c
0036000 a s e e c P u t s T i m e o u
0036020 t : \r f a l s e \r
0036040 d e f a u l t : \r
0036060 S y s E r r ( s t r , e c )
0036100 \r ] \r \f \r / / - - - - - -
0036120 - - - - - - - - - - - - - - - -
*
0036160 - - - - - - - - - - 376 001 \0 356 5 -
0036200 - - - - - - - - - - - - - - - -
0036220 - - - - - - - - - - - \r a n d
0036240 B S P G e t B y t e ( s t r ,
0036260 t i m e o u t ; n u m a r g s
0036300 n a ) = v a l o f \r / / -
0036320 - - - - - - - - - - - - - - - -
*
0036420 - - - - - - - - - - - \r / / S
0036440 t r e a m G e t s p r o c e
0036460 d u r e c a l l e d w h e n
0036500 t h e r e m i g h t n o t
0036520 b e a c u r r e n t i P
0036540 B I . \r [ \r l e t e c = B
0036560 S P P r e p a r e I P B I ( s 376
0036600 001 \0 372 353 t r - o f f s e t B S P
0036620 S t r , ( n a g r 1 ? t
0036640 i m e o u t , - 1 ) ) \r r e s
0036660 u l t i s e c n e 0 ? E
0036700 r r o r s ( s t r , e c ) ,
0036720 G e t s ( s t r ) \r ] \r \r / / -
0036740 - - - - - - - - - - - - - - - -
*
0037040 - - - - - - - - - - - \r a n d
0037060 B S P P r e p a r e I P B I ( s
0037100 o c , t i m e o u t ) = v
0037120 a l o f \r / / - - - - - - - - -
0037140 - - - - - - - - - - - - - - - -
*
0037200 - - - - 376 001 \0 023 k - - - - - - -
0037220 - - - - - - - - - - - - - - - -
0037240 - - - - - - - - \r / / A t t e
0037260 m p t s t o g e t a n e
0037300 w I P B I i f n e c e s s
0037320 a r y . \r / / R e t u r n s
0037340 z e r o n o r m a l l y a n
0037360 d a n e r r o r c o d e
0037400 u p o n f a i l u r e . \r [ \r
0037420 l e t t i m e r = n i l ;
0037440 S e t T i m e r ( l v t i m
0037460 e r , t i m e o u t ) \r
0037500 [ / / r e p e a t \r B
0037520 l o c k ( ) \r i f s o c
0037540 > > B S P S o c . i P B I n e
0037560 0 t h e n b r e a k /
0037600 / s o m e o n e 376 001 \0 d E e
0037620 l s e a l r e a d y s e t
0037640 i t u p \r i f s o c >
0037660 > B S P S o c . u n R e a d P u
0037700 p s n e 0 t h e n \r
0037720 [ / / n e w P B I
0037740 r e a d y t o r e a d \r
0037760 l e t p b i = D e
0040000 q u e u e ( l v s o c > > B S
0040020 P S o c . b s p I Q ) \r
0040040 c o m p i l e i f p u p D
0040060 e b u g t h e n \r
0040100 [ i f p b i e q 0
0040120 t h e n C a l l S w a t ( "
0040140 [ B S P P r e p a r e I P B I ]
0040160 I n p u t Q f o u l e d
0040200 u p " ) ] \r s 376 001
0040220 \0 230 031 o c > > B S P S o c . i P
0040240 B I = p b i \r c
0040260 o m p i l e i f t y p e D a t
0040300 a g e t y p e M a r k %
0040320 t y p e A D a t a g e t y p
0040340 e M a r k % \r t
0040360 y p e A M a r k l s t y p e
0040400 M a r k t h e n \r
0040420 [ B a r f ( " P u p t
0040440 y p e i n e q u a l i t y a
0040460 s s u m p t i o n i n v a l i
0040500 d " ) ] \r s o c >
0040520 > B S P S o c . m a r k P e n d
0040540 i n g = p b i > > P B I . p
0040560 u p . t y p e g e t y p e M
0040600 a r k / / M a r k o r
0040620 A M a 376 001 \0 j 277 r k \r
0040640 s o c > > B S P S o c . i W o
0040660 r d P = l v p b i > > P B
0040700 I . p u p . w o r d s \r
0040720 s o c > > B S P S o c . i B
0040740 y t e P = 0 \r s
0040760 o c > > B S P S o c . i B y t e
0041000 C = p b i > > P B I . p u p
0041020 . l e n g t h - p u p O v B y t
0041040 e s \r b r e a k \r
0041060 ] \r / / d o n
0041100 ' t t e s t s t a t e u n
0041120 t i l a f t e r c h e c k i
0041140 n g u n R e a d P u p s s o
0041160 t h a t a s o c k e t i
0041200 n \r / / s t a t e E n d
0041220 I n w o n ' t 376 001 \0 222 324 g e
0041240 t a n e r r o r u n t i l
0041260 a l l r e c e i v e d P B
0041300 I s h a v e b e e n r e a
0041320 d . \r l e t s t a t e
0041340 = s o c > > B S P S o c . s t
0041360 a t e \r u n l e s s s t
0041400 a t e e q s t a t e O p e n
0041420 % s t a t e e q s t a t
0041440 e E n d O u t r e s u l t i s
0041460 e c B a d S t a t e F o r G e
0041500 t s \r i f t i m e o u t
0041520 n e - 1 & T i m e r H a
0041540 s E x p i r e d ( l v t i m e
0041560 r ) r e s u l t i s e c G e
0041600 t s T i m e o u t \r ] r
0041620 e p e a t \r t e s t s o 376 001 \0
0041640 272 ] c > > B S P S o c . m a r k
0041660 P e n d i n g \r i f s o
0041700 r e s u l t i s e c M a r k E
0041720 n c o u n t e r e d \r i f
0041740 n o t [ s o c > > B S P S o
0041760 c . g e t s = B S P G e t s
0042000 ; r e s u l t i s 0 ] \r ]
0042020 \r \r / / - - - - - - - - - - - -
0042040 - - - - - - - - - - - - - - - -
*
0042140 \r a n d B S P G e t C l e a n
0042160 u p ( s o c , d a t a B y t e
0042200 ) = v a l o f \r / / - - - -
0042220 - - - - - - - - - - - - - - - -
0042240 - - 376 001 \0 b g - - - - - - - - -
0042260 - - - - - - - - - - - - - - - -
*
0042320 - - - - - - - - - - - - - \r / /
0042340 C a l l e d f r o m B S P
0042360 G e t s a f t e r i t c o
0042400 n s u m e s t h e l a s t
0042420 b y t e o f t h e c u r r
0042440 e n t P u p . \r [ \r D o u b l
0042460 e I n c r e m e n t ( l v s o
0042500 c > > B S P S o c . u s e r B y
0042520 t e I D , \r ( s o c > > B S P
0042540 S o c . i P B I ) > > P B I . p
0042560 u p . l e n g t h - p u p O v B
0042600 y t e s ) \r R e l e a s e P B I
0042620 ( s o c > > B S P S o c . i P B
0042640 I ) \r s o c > 376 001 \0 P T > B S P
0042660 S o c . i P B I = 0 \r s o c
0042700 > > B S P S o c . u n R e a d P
0042720 u p s = s o c > > B S P S o
0042740 c . u n R e a d P u p s - 1 \r s
0042760 o c > > B S P S o c . g e t s
0043000 = B S P G e t B y t e \r \r / /
0043020 I f w e p r e v i o u s l
0043040 y s e n t a n a l l o c a
0043060 t i o n o f z e r o a n d
0043100 a t l e a s t h a l f t
0043120 h e s o c k e t ' s \r / / a
0043140 l l o c a t i o n i s n o w
0043160 a v a i l a b l e t h e n
0043200 s e n d a g r a t u i t o u
0043220 s a c k . T h e l a t t
0043240 e r t e s t \r / / i 376 001 \0 237
0043260 347 s t o p r e v e n t t h
0043300 e P u p e q u i v a l e n t
0043320 o f w h a t t h e A r p
0043340 a I n t e r n e t p e o p l
0043360 e \r / / c a l l " S i l l y
0043400 W i n d o w S y n d r o m e
0043420 " . \r i f s o c > > B S P S o
0043440 c . s e n t Z e r o A l l o c
0043460 & \r s o c > > B S P S o c . u
0043500 n R e a d P u p s l e s o c
0043520 > > B S P S o c . m a x I P B I
0043540 r s h i f t 1 t h e n \r
0043560 S e n d A c k ( s o c ) \r r
0043600 e s u l t i s d a t a B y t e
0043620 \r ] \r \r / / - - - - - - - - - -
0043640 - - - - - - - - - - - - - - - -
0043660 - 376 001 \0 350 2 - - - - - - - - - -
0043700 - - - - - - - - - - - - - - - -
*
0043740 - - - - - - - \r a n d B S P E
0043760 n d o f s ( s t r ) = s t r
0044000 > > B S P S t r . g e t s e q
0044020 B S P G e t s ? f a l s e ,
0044040 \r B S P P r e p a r e I
0044060 P B I ( s t r - o f f s e t B S
0044100 P S t r , 0 ) n e 0 \r / /
0044120 - - - - - - - - - - - - - - - -
*
0044220 - - - - - - - - - - - - \r \f \r /
0044240 / - - - - - - - - - - - - - - -
0044260 - - - - - - 376 001 \0 4 356 - - - - -
0044300 - - - - - - - - - - - - - - - -
*
0044360 - - \r a n d B S P P u t B y t
0044400 e ( s t r , d a t a B y t e ,
0044420 t i m e o u t ; n u m a r g
0044440 s n a ) = v a l o f \r / /
0044460 - - - - - - - - - - - - - - - -
*
0044560 - - - - - - - - - - - - \r / /
0044600 S t r e a m P u t s p r o c
0044620 e d u r e c a l l e d w h e
0044640 n t h e r e m i g h t n o
0044660 t b e a c u r r 376 001 \0 t 200
0044700 e n t o P B I . \r [ \r l e t
0044720 e c = B S P P r e p a r e O
0044740 P B I ( s t r - o f f s e t B S
0044760 P S t r , ( n a g r 2 ?
0045000 t i m e o u t , - 1 ) ) \r i f
0045020 e c n e 0 r e s u l t i
0045040 s E r r o r s ( s t r , e c
0045060 ) \r r e s u l t i s P u t s (
0045100 s t r , d a t a B y t e ) \r ]
0045120 \r \r / / - - - - - - - - - - - -
0045140 - - - - - - - - - - - - - - - -
*
0045240 \r a n d B S P P r e p a r e O
0045260 P B I ( s o c , t i m e o u t
0045300 376 001 \0 177 % ) = v a l o f \r /
0045320 / - - - - - - - - - - - - - - -
0045340 - - - - - - - - - - - - - - - -
*
0045420 - - - - - - - - - - - - - \r / /
0045440 A t t e m p t s t o s e t
0045460 u p a n e w O P B I i
0045500 f n e c e s s a r y . \r / /
0045520 R e t u r n s z e r o n o r
0045540 m a l l y a n d a n e r r
0045560 o r c o d e u p o n f a i
0045600 l u r e . \r [ \r l e t t i m e
0045620 r = n i l ; S e t T i m e
0045640 r ( l v t i m e r , t i m e
0045660 o u t ) \r [ / / r e p
0045700 e a t \r 376 001 \0 227 234 B l o c
0045720 k ( ) \r i f s o c > > B
0045740 S P S o c . o P B I n e 0
0045760 t h e n b r e a k / / s
0046000 o m e o n e e l s e a l r e
0046020 a d y s e t i t u p \r
0046040 l e t s t a t e = s o c
0046060 > > B S P S o c . s t a t e \r
0046100 u n l e s s s t a t e e
0046120 q s t a t e O p e n % s t
0046140 a t e e q s t a t e E n d I
0046160 n r e s u l t i s e c B a d
0046200 S t a t e F o r P u t s \r
0046220 i f s o c > > B S P S o c . p
0046240 u p A l l o c g r 0 & s
0046260 o c > > B S P S o c . b y t e A
0046300 l l o c g r 0 376 001 \0 006 323 &
0046320 \r s o c > > B S P S o c
0046340 . n u m T P B I g r 1 &
0046360 s o c > > B S P S o c . n u m O
0046400 P B I g r 1 t h e n \r
0046420 [ / / o k t o a
0046440 l l o c a t e a n e w P B
0046460 I \r l e t p b i
0046500 = G e t P B I ( s o c ) \r
0046520 p b i > > P B I . p u p
0046540 . l e n g t h = M i n ( s o
0046560 c > > B S P S o c . b y t e s P
0046600 e r P u p , s o c > > B S P S
0046620 o c . b y t e A l l o c ) \r
0046640 p b i > > P B I . p u p
0046660 . t y p e = t y p e D a t a
0046700 \r s o c > > B S P 376
0046720 001 \0 H 0 S o c . o P B I = p
0046740 b i \r s o c > > B S
0046760 P S o c . o W o r d P = l v
0047000 p b i > > P B I . p u p . w o
0047020 r d s \r s o c > > B
0047040 S P S o c . o B y t e P = 0
0047060 \r s o c > > B S P S
0047100 o c . o B y t e C = p b i >
0047120 > P B I . p u p . l e n g t h \r
0047140 s o c > > B S P S o
0047160 c . p u t s = B S P P u t s
0047200 / / a s s e m b l y - l a
0047220 n g u a g e v e r s i o n \r
0047240 b r e a k \r
0047260 ] \r i f t i m e o u t
0047300 n e - 1 & T i m e r H a
0047320 s E x p 376 001 \0 355 340 i r e d ( l v
0047340 t i m e r ) r e s u l t i s
0047360 e c P u t s T i m e o u t \r
0047400 ] r e p e a t \r r e s u l
0047420 t i s 0 \r ] \r \r / / - - - - -
0047440 - - - - - - - - - - - - - - - -
*
0047540 - - - - - - - \r a n d B S P F
0047560 o r c e O u t p u t ( s o c ,
0047600 s e n d N o w ; n u m a r g s
0047620 n a ) = v a l o f \r / / -
0047640 - - - - - - - - - - - - - - - -
*
0047720 - - - - - - - - - 376 001 \0 020 / - -
0047740 - - - - - - - - - - - - - - - -
0047760 \r / / C a l l e d f r o m
0050000 B S P P u t s a f t e r i t
0050020 c o m p l e t e l y f i l l
0050040 s t h e c u r r e n t P u
0050060 p , a n d \r / / e l s e w h
0050100 e r e t o f o r c e t r a
0050120 n s m i s s i o n o f a p
0050140 a r t i a l l y - f i l l e d
0050160 P u p . \r / / I f s e n d N
0050200 o w t h e n t h e P u p
0050220 i s s e n t a s a n A D
0050240 a t a o r A M a r k t o
0050260 f o r c e i m m e d i a t e \r
0050300 / / a c k n o w l e d g m e n
0050320 t a n d t h e r e b y 376 001
0050340 \0 323 346 g e t t h e o u t p u
0050360 t s t r e a m c l e a n e d
0050400 u p q u i c k l y . \r [ \r l
0050420 e t p b i = s o c > > B S
0050440 P S o c . o P B I \r i f p b i
0050460 n e 0 t h e n \r [ \r
0050500 l e t n B y t e s =
0050520 p b i > > P B I . p u p . l e n
0050540 g t h - s o c > > B S P S o
0050560 c . o B y t e C \r p b i >
0050600 > P B I . p u p . l e n g t h
0050620 = n B y t e s + p u p O v B y
0050640 t e s \r S e t P u p I D (
0050660 p b i , l v s o c > > B S P
0050700 S o c . x m i t B y t e I D ) \r
0050720 D o u b l e I n c r e m e
0050740 n t ( 376 001 \0 270 256 l v s o c > >
0050760 B S P S o c . x m i t B y t e I
0051000 D , n B y t e s ) \r s o
0051020 c > > B S P S o c . u n A c k e
0051040 d P u p s = s o c > > B S P
0051060 S o c . u n A c k e d P u p s +
0051100 1 \r s o c > > B S P S o c
0051120 . u n A c k e d B y t e s =
0051140 s o c > > B S P S o c . u n A c
0051160 k e d B y t e s + n B y t e s \r
0051200 s o c > > B S P S o c . p
0051220 u p A l l o c = s o c > > B
0051240 S P S o c . p u p A l l o c - 1
0051260 \r s o c > > B S P S o c .
0051300 b y t e A l l o c = s o c >
0051320 > B S P S o c . b y t e A l l o
0051340 c - n B y t e s 376 001 \0 1 352 \r
0051360 s o c > > B S P S o c . o P B
0051400 I = 0 \r s o c > > B S
0051420 P S o c . o B y t e C = 0 \r
0051440 s o c > > B S P S o c . p
0051460 u t s = B S P P u t B y t e
0051500 \r p b i > > P B I . q u e
0051520 u e = l v s o c > > B S P
0051540 S o c . b s p T Q / / r e t
0051560 u r n p b i t o b s p T Q
0051600 \r p b i > > P B I . t i m
0051620 e r = s o c > > B S P S o c
0051640 . a D a t a C o u n t \r T
0051660 r a n s m i t S t r a t e g y (
0051700 p b i , n a g r 1 & s
0051720 e n d N o w ) \r C o m p l
0051740 e t e P u p ( p b i ) \r 376 001 \0
0051760 353 342 S e t T i m e o u t ( s
0052000 o c ) \r ] \r r e s u l t i
0052020 s t r u e / / f o r B
0052040 S P P u t s \r ] \r \f \r / / - - -
0052060 - - - - - - - - - - - - - - - -
*
0052160 - - - - - - - - - \r a n d B S
0052200 P G e t M a r k ( s o c ) =
0052220 v a l o f \r / / - - - - - - - -
0052240 - - - - - - - - - - - - - - - -
*
0052340 - - - - \r [ \r u n l e s s s o
0052360 c > 376 001 \0 027 324 > B S P S o c . m
0052400 a r k P e n d i n g r e s u l
0052420 t i s E r r o r s ( s o c ,
0052440 e c B a d B S P G e t M a r k )
0052460 \r s o c > > B S P S o c . m a r
0052500 k P e n d i n g = f a l s e
0052520 \r r e s u l t i s G e t s ( s
0052540 o c + o f f s e t B S P S t r )
0052560 \r ] \r \r / / - - - - - - - - - -
0052600 - - - - - - - - - - - - - - - -
*
0052700 - - \r a n d B S P P u t M a r
0052720 k ( s o c , m a r k B y t e ,
0052740 t i m e o u t , s e n d N o
0052760 w ; n u m a 376 001 \0 331 ) r g s
0053000 n a ) = v a l o f \r / / - -
0053020 - - - - - - - - - - - - - - - -
*
0053120 - - - - - - - - - - \r [ \r / /
0053140 T h i s i s h a i r y .
0053160 W e w a n t t o p u t t
0053200 h e m a r k B y t e i n a
0053220 f r e s h P B I . J u s
0053240 t c a l l i n g \r / / B S P
0053260 F o r c e O u t p u t f o l l
0053300 o w e d b y P u t s i s
0053320 n o t g o o d e n o u g h ,
0053340 b e c a u s e P u t s c a
0053360 l l s \r / / B S P P r 376 001 \0 7
0053400 274 e p a r e O P B I w h i c h
0053420 m a y B l o c k a w a i t
0053440 i n g a l l o c a t i o n ,
0053460 a n d m e a n w h i l e s o
0053500 m e \r / / o t h e r c o n t
0053520 e x t m i g h t d o a P
0053540 u t s o f s o m e d a t a
0053560 b y t e s , w h i c h o u
0053600 r P u t s w o u l d \r / /
0053620 t h e n a p p e n d t o . \r
0053640 [ / / r e p e a t \r
0053660 B S P F o r c e O u t p u t
0053700 ( s o c ) \r l e t e c
0053720 = B S P P r e p a r e O P B I
0053740 ( s o c , ( n a g e 3 ?
0053760 t i m e o u t , - 1 ) ) \r
0054000 376 001 \0 350 230 i f e c n e 0
0054020 r e s u l t i s E r r o r s
0054040 ( s o c + o f f s e t B S P S t
0054060 r , e c ) \r / / t h i
0054100 s i s h o w w e t e l l
0054120 w h e t h e r w e n o w
0054140 h a v e a f r e s h P B I
0054160 : \r ] r e p e a t u n t
0054200 i l s o c > > B S P S o c . o
0054220 B y t e C e q s o c > > B S
0054240 P S o c . o P B I > > P B I . p
0054260 u p . l e n g t h \r \r s o c > >
0054300 B S P S o c . o P B I > > P B I
0054320 . p u p . t y p e = t y p e
0054340 M a r k \r P u t s ( s o c + o f
0054360 f s e t B S P S t r , m a r k
0054400 B y t e ) 376 \0 Q 256 362 / / g
0054420 u a r a n t e e d t o s u c
0054440 c e e d \r B S P F o r c e O u t
0054460 p u t ( s o c , n a g r 3
0054500 & s e n d N o w ) \r r e s u
0054520 l t i s t r u e \r ] \r 377 \0 \0 P
0054540 u p B S P P r o t . b c p l \0 373
0054560 230 & 245 ) \0 \0 376 001 \0 026 033 / / P u
0054600 p B S P P r o t . b c p l - -
0054620 B y t e S t r e a m P r o
0054640 t o c o l \r / / c o m p a n i
0054660 o n f i l e s a r e P u p
0054700 B S P S t r e a m s . b c p l
0054720 a n d P u p B S P a . a s m \r
0054740 / / C o p y r i g h t X e r
0054760 o x C o r p o r a t i o n 1
0055000 9 7 9 , 1 9 8 1 \r \r / / L a
0055020 s t m o d i f i e d N o v e
0055040 m b e r 2 1 , 1 9 8 1 1
0055060 0 : 4 9 A M b y T a f t \r
0055100 \r g e t " P u p . d e c l " \r
0055120 g e t " P u p R T P I n t e r
0055140 n a l . d e c l " \r \r e x t e r
0055160 n a l \r [ \r / / o u t 376 001 \0 216 353
0055200 g o i n g p r o c e d u r e s
0055220 \r B S P P u p P r o c ; B S P
0055240 T i m e r P r o c ; S e n d A
0055260 c k ; T r a n s m i t S t r a
0055300 t e g y ; S e t T i m e o u t
0055320 ; S e a r c h T Q \r \r / / i n
0055340 c o m i n g p r o c e d u r e
0055360 s \r B S P H a n d l e U n c o m
0055400 m o n P u p ; R T P F i l t e
0055420 r ; R T P F S M \r R e l e a s
0055440 e P B I ; G e t P B I ; C o
0055460 m p l e t e P u p ; S e t P u
0055500 p I D \r Z e r o ; M u l t E q
0055520 ; D o u b l e D i f f e r e n
0055540 c e ; D o u b l e I n c r e m
0055560 e n t \r S e t T i m e r ; T i
0055600 376 001 \0 i p m e r H a s E x p i r
0055620 e d \r E n q u e u e ; D e q u
0055640 e u e ; U n q u e u e ; I n
0055660 s e r t A f t e r ; F l u s h
0055700 Q u e u e \r E n a b l e I n t e
0055720 r r u p t s ; D i s a b l e I
0055740 n t e r r u p t s ; M i n ;
0055760 M a x \r \r / / s t a t i c s \r m
0056000 a x P u p D a t a B y t e s ;
0056020 o v e r l a p D a t a W i t h A
0056040 c k \r ] \r \r / / I f o v e r
0056060 l a p D a t a W i t h A c k i
0056100 s t r u e , T r a n s m i t
0056120 S t r a t e g y w i l l g e
0056140 n e r a t e \r / / a n A D a
0056160 t a b e f o r e a l l o c a
0056200 t i o n 376 001 \0 E 360 i s c o m
0056220 p l e t e l y e x h a u s t e
0056240 d , t h e r e b y p e r m i
0056260 t t i n g \r / / c o n t i n u
0056300 e d s e n d i n g d u r i n
0056320 g t h e A D a t a / A c k
0056340 r o u n d - t r i p t i m e .
0056360 \r / / T h i s i m p r o v e
0056400 s p e r f o r m a n c e w h
0056420 e n t h e r o u n d - t r i
0056440 p t i m e i s l a r g e .
0056460 \r / / U n f o r t u n a t e l
0056500 y , i t h a s d i s a s t
0056520 e r o u s e f f e c t s o n
0056540 p e r f o r m a n c e i n
0056560 c e r t a i n \r / / s i t u a
0056600 t i o n s b e c a 376 001 \0 354 Q u
0056620 s e o f l o s t p a c k e
0056640 t s c a u s e d b y E t h
0056660 e r n e t i n t e r f a c e \r
0056700 / / t u r n a r o u n d l a
0056720 t e n c y i n A l t o s a
0056740 n d N o v a s . W e t h
0056760 e r e f o r e d o n o t e
0057000 n a b l e \r / / t h i s f e
0057020 a t u r e a t t h e p r e
0057040 s e n t t i m e . \r \r s t a t
0057060 i c [ o v e r l a p D a t a
0057100 W i t h A c k = f a l s e
0057120 ] \r \f \r / / - - - - - - - - - -
0057140 - - - - - - - - - - - - - - - -
*
0057200 - - - - - - - - - - - - - - - 376
0057220 001 \0 372 243 - - - - - - - - - - - -
0057240 - - - - - - - \r l e t B S P P
0057260 u p P r o c ( p b i ) b e \r /
0057300 / - - - - - - - - - - - - - - -
0057320 - - - - - - - - - - - - - - - -
*
0057400 - - - - - - - - - - - - - \r / /
0057420 I n c o m i n g P u p s t
0057440 h a t a r e n o t R T P
0057460 c o m e h e r e . p b i
0057500 i s a l w a y s d i s p o s
0057520 e d o f , \r / / e i t h e r
0057540 h e r e o r b y h i g h
0057560 e r - l e v e l h a n d l e r
0057600 t h a t w e c a l l . \r [
0057620 \r l e t 376 001 \0 345 340 s o c =
0057640 p b i > > P B I . s o c k e t \r
0057660 \r / / i g n o r e p b i i
0057700 f s o c k e t ' s s t a t e
0057720 i s n o t O p e n , E n
0057740 d I n , o r E n d O u t \r i
0057760 f s o c > > B S P S o c . s t
0060000 a t e l s s t a t e O p e n
0060020 % s o c > > B S P S o c . s
0060040 t a t e g r s t a t e E n d
0060060 O u t t h e n \r [ R e
0060100 l e a s e P B I ( p b i ) ; r
0060120 e t u r n ] \r \r s w i t c h o
0060140 n p b i > > P B I . p u p . t
0060160 y p e i n t o \r [ \r
0060200 c a s e t y p e A M a r k :
0060220 \r c a s e 376 001 \0 I 342 t y
0060240 p e A D a t a : \r s
0060260 o c > > B S P S o c . a c k P e
0060300 n d i n g = t r u e \r
0060320 c a s e t y p e D a t a : \r
0060340 c a s e t y p e M a r k :
0060360 \r [ \r /
0060400 / d i s c a r d p b i u n
0060420 l e s s a l l t h e f o l
0060440 l o w i n g c o n d i t i o n
0060460 s a r e m e t : \r
0060500 / / f r o m c o r r e c t
0060520 s o u r c e p o r t ? \r
0060540 u n l e s s R T P F i
0060560 l t e r ( p b i , t r u e ,
0060600 f a l s e ) & \r \r
0060620 / / s o c k e t a l l o 376 001
0060640 \0 225 210 c a t i o n s u f f i c
0060660 i e n t ? \r s o c
0060700 > > B S P S o c . n u m T P B I
0060720 n e 0 & s o c > > B S P
0060740 S o c . n u m I P B I n e 0
0060760 & \r \r / / p b i
0061000 n o n - e m p t y ? \r
0061020 p b i > > P B I . p u p .
0061040 l e n g t h g r p u p O v B
0061060 y t e s & \r \r / /
0061100 a l l o f p b i ' s b y
0061120 t e s i n a l l o c a t i o
0061140 n w i n d o w ? \r
0061160 D o u b l e D i f f e r e n c
0061200 e ( l v p b i > > P B I . p u
0061220 p . i d , l v s o c > > B S
0061240 P S o 376 001 \0 035 377 c . r c v B y t
0061260 e I D ) + \r p b
0061300 i > > P B I . p u p . l e n g t
0061320 h - ( p u p O v B y t e s +
0061340 1 ) u l s \r ( s
0061360 o c > > B S P S o c . m a x I P
0061400 B I - 1 ) * m a x P u p D a t a
0061420 B y t e s & \r \r /
0061440 / n o n - d u p l i c a t e ?
0061460 \r I n s e r t I n
0061500 S e q u e n c e ( l v s o c >
0061520 > B S P S o c . b s p I Q , p
0061540 b i ) d o \r
0061560 [ R e l e a s e P B I ( p b i
0061600 ) ; e n d c a s e ] / /
0061620 d i s c a r d \r \r
0061640 w h i l e p b 376 001 \0 304 347 i n
0061660 e 0 & \r M u l
0061700 t E q ( l v s o c > > B S P S
0061720 o c . r c v B y t e I D , l v
0061740 p b i > > P B I . p u p . i d
0061760 ) d o \r [
0062000 / / F i l l e d i n f i
0062020 r s t h o l e , a d v a n c
0062040 e r c v B y t e I D \r
0062060 D o u b l e I n c r e
0062100 m e n t ( l v s o c > > B S P
0062120 S o c . r c v B y t e I D , \r
0062140 p b i > > P B
0062160 I . p u p . l e n g t h - p u p
0062200 O v B y t e s ) \r
0062220 s o c > > B S P S o c . u n
0062240 R e a d P u p s = s o 376 001 \0
0062260 351 244 c > > B S P S o c . u n R e
0062300 a d P u p s + 1 \r
0062320 p b i = p b i ! 0 \r
0062340 ] \r \r
0062360 S e t T i m e r ( l v s o c >
0062400 > B S P S o c . i n a c t i v i
0062420 t y T i m e r , i n a c t i v
0062440 i t y T i m e o u t ) \r
0062460 e n d c a s e \r
0062500 ] \r \r c a s e t y p e A
0062520 c k : \r [ \r
0062540 u n l e s s R T P F i l t
0062560 e r ( p b i , t r u e , f a
0062600 l s e ) & \r D o
0062620 u b l e D i f f e r e n c e ( l
0062640 v p b i > > P B I . p u p . i
0062660 d , 376 001 \0 v B l v s o c > >
0062700 B S P S o c . l a s t A c k I D
0062720 ) g e 0 d o \r
0062740 [ R e l e a s e P B I (
0062760 p b i ) ; e n d c a s e ]
0063000 / / w r o n g s o u r c e
0063020 o r o u t o f o r d e r
0063040 \r \r i f s o c > >
0063060 B S P S o c . a c k R e q u e s
0063100 t e d t h e n \r
0063120 [ / / U p d a t e t
0063140 h e a d a p t i v e t i m e
0063160 o u t = 2 t i m e s t h
0063200 e a v e r a g e r o u n d -
0063220 t r i p \r
0063240 / / d e l a y , e x p o n
0063260 e n t i a l l 376 001 \0 3 214 y a g
0063300 e d o v e r t h e l a s t
0063320 8 s a m p l e s . \r
0063340 l e t t = n i l
0063360 ; S e t T i m e r ( l v t ,
0063400 0 ) \r c o m
0063420 p i l e t e s t a l t o \r
0063440 i f s o [
0063460 t = ( t - s o c > > B S P
0063500 S o c . l a s t A D a t a T i m
0063520 e ) l s h i f t 3 + 4 ]
0063540 \r i f n
0063560 o t [ t = ( t - s o c >
0063600 > B S P S o c . l a s t A D a t
0063620 a T i m e ) l s h i f t 1
0063640 + 1 ] \r s o
0063660 c > > B S P S o c . a D 376 001 \0 367
0063700 Q a t a T i m e o u t = \r
0063720 ( 7 * s o c > >
0063740 B S P S o c . a D a t a T i m e
0063760 o u t + M a x ( 5 , M i n ( 1
0064000 0 0 0 , t ) ) ) r s h i f t
0064020 3 \r ] \r \r
0064040 s o c > > B S P S o c
0064060 . l a s t A c k I D ^ 1 = p
0064100 b i > > P B I . p u p . i d ^ 1
0064120 \r s o c > > B S P S
0064140 o c . l a s t A c k I D ^ 2 =
0064160 p b i > > P B I . p u p . i d
0064200 ^ 2 \r \f \r / / B S P P u p P r
0064220 o c ( c o n t ' d ) \r \r
0064240 / / m o v e a l l P
0064260 B I s f r o m b s p T Q t
0064300 o 376 001 \0 ! 374 a p r i v a t e
0064320 q u e u e \r l e t
0064340 t Q = v e c 1 \r
0064360 D i s a b l e I n t e r r u
0064400 p t s ( ) \r t Q ! 0
0064420 = s o c > > B S P S o c . b
0064440 s p T Q . h e a d ; t Q ! 1
0064460 = s o c > > B S P S o c . b s
0064500 p T Q . t a i l \r s
0064520 o c > > B S P S o c . b s p T Q
0064540 . h e a d = 0 \r
0064560 E n a b l e I n t e r r u p t s
0064600 ( ) \r \r / / d e c
0064620 i d e w h e t h e r t o r
0064640 e l e a s e , k e e p , o r
0064660 r e t r a n s m i t e a c h
0064700 p b i \r 376 001 \0 357 307
0064720 l e t r T Q = v e c 1 ;
0064740 r T Q ! 0 = 0 / / q
0064760 o f p b i s t o r e t r
0065000 a n s m i t \r
0065020 [ / / r e p e a t \r
0065040 l e t n p b i =
0065060 D e q u e u e ( t Q ) ; i f
0065100 n p b i e q 0 b r e a k \r
0065120 i f n p b i
0065140 > > P B I . p u p . t y p e e
0065160 q t y p e I n t e r r u p t
0065200 t h e n \r
0065220 [ C o m p l e t e P u p ( n
0065240 p b i ) ; l o o p ] / /
0065260 R e t r a n s m i t i n t e
0065300 r r u p t s \r 376 001 \0 214 277
0065320 t e s t D o u b l e
0065340 D i f f e r e n c e ( l v s o
0065360 c > > B S P S o c . l a s t A c
0065400 k I D , \r l
0065420 v n p b i > > P B I . p u p .
0065440 i d ) g e n p b i > > P B I
0065460 . p u p . l e n g t h - p u p O
0065500 v B y t e s \r
0065520 i f s o \r
0065540 [ / / T h i
0065560 s p b i h a s b e e n a
0065600 c k e d , r e l e a s e i t
0065620 \r
0065640 s o c > > B S P S o c . u n A c
0065660 k e d P u p s = s o c > > B
0065700 S P S o c . u n A c k e d P u p
0065720 376 001 \0 257 025 s - 1 \r
0065740 s o c > > B S P
0065760 S o c . u n A c k e d B y t e s
0066000 = s o c > > B S P S o c . u
0066020 n A c k e d B y t e s - \r
0066040 (
0066060 n p b i > > P B I . p u p . l e
0066100 n g t h - p u p O v B y t e s )
0066120 \r
0066140 R e l e a s e P B I ( n p b i )
0066160 \r
0066200 s o c > > B S P S o c . p u p A
0066220 l l o c C o u n t = s o c >
0066240 > B S P S o c . p u p A l l o c
0066260 C o u n t + 1 \r
0066300 ] \r
0066320 376 001 \0 > ] i f n o t \r
0066340 [
0066360 / / p b i n o t y e t
0066400 a c k e d , d e c i d e w
0066420 h e t h e r t o r e t r a n
0066440 s m i t \r
0066460 t e s t s o c > > B S
0066500 P S o c . a D a t a C o u n t -
0066520 n p b i > > P B I . t i m e r
0066540 g r 0 & \r
0066560 s o c > > B S P S
0066600 o c . a c k R e q u e s t e d \r
0066620
0066640 i f s o / / Y e s ,
0066660 r e t a i n f o r r e t r a
0066700 n s m i s s i o n \r
0066720 376 001 \0 367 +
0066740 [ \r
0066760 T r a n s
0067000 m i t S t r a t e g y ( n p b i
0067020 , f a l s e ) \r
0067040 I n
0067060 s e r t I n S e q u e n c e ( r
0067100 T Q , n p b i ) / / c a n
0067120 ' t b e d u p l i c a t e \r
0067140
0067160 ] \r
0067200 i f n o t
0067220 / / N o , j u s t p u t
0067240 b a c k o n b s p T Q \r
0067260
0067300 E n q u e u e ( l v s o
0067320 c > > B S P S o c . b s p T Q 376
0067340 001 \0 177 026 , n p b i ) \r
0067360 ] \r
0067400 ] r e p e a t \r \r
0067420 / / U p d a t e
0067440 a l l o c a t i o n s \r
0067460 s o c > > B S P S o c . a c
0067500 k R e q u e s t e d = f a l
0067520 s e \r i f s o c >
0067540 > B S P S o c . p u p A l l o c
0067560 C o u n t g e p u p A l l o
0067600 c H y s t e r e s i s t h e n
0067620 \r [ / /
0067640 T i m e t o a t t e m p t
0067660 t o i n c r e a s e m a x P
0067700 u p A l l o c \r
0067720 s o c > > B S P S o c . p u p
0067740 A l l o 376 001 \0 356 b c C o u n t
0067760 = 0 \r s o c
0070000 > > B S P S o c . m a x P u p A
0070020 l l o c = \r
0070040 M i n ( s o c > > B S P S o c
0070060 . m a x P u p A l l o c + 1 ,
0070100 s o c > > B S P S o c . m a x O
0070120 P B I ) \r ] \r
0070140 s o c > > B S P S o
0070160 c . b y t e s P e r P u p =
0070200 M i n ( p b i > > P B I . p u p
0070220 . w o r d s ^ 1 , m a x P u p
0070240 D a t a B y t e s ) \r
0070260 s o c > > B S P S o c . p u p
0070300 A l l o c = M i n ( s o c >
0070320 > B S P S o c . m a x P u p A l
0070340 l o c , \r 376 001 \0 r 272
0070360 p b i > > P B I . p u p . w o
0070400 r d s ^ 2 - s o c > > B S P
0070420 S o c . u n A c k e d P u p s )
0070440 \r s o c > > B S P S
0070460 o c . b y t e A l l o c = p
0070500 b i > > P B I . p u p . w o r d
0070520 s ^ 3 - s o c > > B S P S o
0070540 c . u n A c k e d B y t e s \r
0070560 R e l e a s e P B I (
0070600 p b i ) \r \r / / i
0070620 f w e h a v e a n y P B
0070640 I s t o r e t r a n s m i t
0070660 , d o s o n o w \r
0070700 i f r T Q ! 0 n e 0
0070720 t h e n \r [ \r
0070740 T r a n s 376 001
0070760 \0 ] 243 m i t S t r a t e g y ( r
0071000 T Q ! 1 ) / / M a y b e
0071020 t u r n t a i l i n t o A
0071040 D a t a \r w h
0071060 i l e r T Q ! 0 n e 0 d
0071100 o C o m p l e t e P u p ( D e
0071120 q u e u e ( r T Q ) ) \r
0071140 ] \r \r S e
0071160 t T i m e o u t ( s o c ) \r
0071200 S e t T i m e r ( l v
0071220 s o c > > B S P S o c . i n a c
0071240 t i v i t y T i m e r , i n a
0071260 c t i v i t y T i m e o u t ) \r
0071300 e n d c a s e \r
0071320 ] \r \f \r / / B S P P u
0071340 p P r o c ( c o n t ' d ) \r \r
0071360 376 001 \0 221 W c a s e t y p
0071400 e I n t e r r u p t : \r c
0071420 a s e t y p e I n t e r r u p
0071440 t R e p l y : \r c a s e
0071460 t y p e E n d : \r B
0071500 S P H a n d l e U n c o m m o n
0071520 P u p ( s o c , p b i ) /
0071540 / i t a l w a y s d i s p
0071560 o s e s o f p b i \r
0071600 e n d c a s e \r \r c a
0071620 s e t y p e E r r o r : \r
0071640 i f p b i > > P B I .
0071660 p u p . w o r d s ^ 1 1 e q
0071700 3 % / / p o r t I Q
0071720 o v e r f l o w \r
0071740 p b i > > P B I . p u p . w o r
0071760 d s ^ 1 1 e q 376 001 \0 315 v # 1
0072000 0 0 7 t h e n / / g a t
0072020 e w a y O Q o v e r f l o w
0072040 \r [ \r
0072060 / / G o t a c o
0072100 n g e s t i o n e r r o r .
0072120 A t t e m p t t o t h r o
0072140 t t l e b a c k o u t p u t
0072160 \r / / b y
0072200 d e c r e a s i n g t h e m
0072220 a x i m u m o u t g o i n g
0072240 P u p a l l o c a t i o n . \r
0072260 s o c > > B S
0072300 P S o c . m a x P u p A l l o c
0072320 = M a x ( s o c > > B S P S
0072340 o c . m a x P u p A l l o c - 1
0072360 , 1 ) \r 376 001 \0
0072400 005 375 s o c > > B S P S o c . p
0072420 u p A l l o c C o u n t = 0
0072440 \r ] \r
0072460 / / l e t h i g h e r -
0072500 l e v e l h a n d l e r l o
0072520 o k a t i t a l s o \r \r
0072540 d e f a u l t : \r
0072560 / / n o n - B S P P u p s
0072600 g e t p a s s e d t o h
0072620 i g h e r - l e v e l h a n d
0072640 l e r , w h i c h a l w a y
0072660 s \r / / d i s p o
0072700 s e s o f p b i \r
0072720 ( s o c > > B S P S o c . b s
0072740 p O t h e r P u p P r o c ) ( p
0072760 b i ) \r ] \r \r i f s o c
0073000 > > 376 001 \0 353 024 B S P S o c . a c
0073020 k P e n d i n g t h e n S e
0073040 n d A c k ( s o c ) \r ] \r \r / /
0073060 - - - - - - - - - - - - - - - -
*
0073160 - - - - - - - - - - - - \r a n d
0073200 I n s e r t I n S e q u e n c
0073220 e ( q u e u e , p b i ) =
0073240 v a l o f \r / / - - - - - - - -
0073260 - - - - - - - - - - - - - - - -
*
0073360 - - - - \r / / I n s e r t s
0073400 p b i i n t 376 001 \0 004 k o t h
0073420 e p r o p e r p l a c e i
0073440 n q u e u e t o m a i n t
0073460 a i n a s c e n d i n g o r
0073500 d e r o f \r / / P u p I D
0073520 s . Q u e u e m u s t a
0073540 l r e a d y b e i n o r d
0073560 e r . \r / / R e t u r n s t
0073600 r u e n o r m a l l y ; f a
0073620 l s e i f t h e p b i ' s
0073640 I D d u p l i c a t e s o
0073660 n e a l r e a d y i n \r / /
0073700 t h e q u e u e . \r [ \r / /
0073720 T e s t f i r s t f o r
0073740 t h e m o s t c o m m o n
0073760 c a s e o f t h e n e w
0074000 p b i g o i n g o n 376 001 \0 \
0074020 ~ t h e e n d o f \r / /
0074040 t h e q u e u e . I f i
0074060 t d o e s n ' t b e l o n g
0074100 t h e r e , t h e n i n i
0074120 t i a t e a s e a r c h f
0074140 r o m t h e \r / / f r o n t
0074160 o f t h e q u e u e f o
0074200 r t h e r i g h t p l a c
0074220 e t o i n s e r t i t . \r
0074240 t e s t q u e u e ! 0 e q
0074260 0 % \r D o u b l e D i f f e
0074300 r e n c e ( l v p b i > > P B
0074320 I . p u p . i d , l v ( q u
0074340 e u e ! 1 ) > > P B I . p u p .
0074360 i d ) g r 0 \r i f s o
0074400 E n q u e u e ( q u e u e ,
0074420 p 376 001 \0 366 : b i ) \r i f n
0074440 o t \r [ / / S e
0074460 a r c h q u e u e f o r r
0074500 i g h t p l a c e t o i n
0074520 s e r t n e w p b i \r
0074540 l e t p r e d = q u
0074560 e u e \r l e t d
0074600 = n i l \r \r / /
0074620 a s s e r t : t h e q u e u
0074640 e i s n o n - e m p t y a
0074660 n d p b i ' s I D < = t
0074700 h e t a i l i t e m ' s I
0074720 D . \r / / T h e r
0074740 e f o r e t h i s l o o p
0074760 i s g u a r a n t e e d t o
0075000 t e r m i n a t e . \r
0075020 [ 376 001 \0 307 \v / / r
0075040 e p e a t \r d
0075060 = D o u b l e D i f f e r e
0075100 n c e ( l v p b i > > P B I .
0075120 p u p . i d , l v ( p r e d
0075140 ! 0 ) > > P B I . p u p . i d )
0075160 \r i f d l
0075200 e 0 t h e n b r e a k \r
0075220 p r e d = p
0075240 r e d ! 0 \r ]
0075260 r e p e a t \r \r i
0075300 f d e q 0 t h e n r e
0075320 s u l t i s f a l s e / /
0075340 d u p l i c a t e \r
0075360 I n s e r t A f t e r ( q u e
0075400 u e , p r e d , p b i ) \r
0075420 ] \r \r r e s 376 001 \0 266 375
0075440 u l t i s t r u e \r ] \r \f \r /
0075460 / - - - - - - - - - - - - - - -
0075500 - - - - - - - - - - - - - - - -
*
0075560 - - - - - - - - - - - - - \r a n
0075600 d B S P T i m e r P r o c ( s
0075620 o c ) b e \r / / - - - - - - -
0075640 - - - - - - - - - - - - - - - -
*
0075740 - - - - - \r / / C a l l e d
0075760 w h e n e v e r t h e s o c
0076000 k e t b s p T i m e r e x p
0076020 i r e s \r [ \r / / d o n o t
0076040 376 001 \0 273 275 h i n g i f s o c
0076060 k e t ' s s t a t e i s n
0076100 o t O p e n , E n d I n ,
0076120 o r E n d O u t \r u n l e s s
0076140 s o c > > B S P S o c . s t a
0076160 t e l s s t a t e O p e n
0076200 % s o c > > B S P S o c . s t
0076220 a t e g r s t a t e E n d O
0076240 u t d o \r [ \r u n
0076260 l e s s s o c > > B S P S o c
0076300 . n o I n a c t i v i t y T i m
0076320 e o u t d o \r i f
0076340 T i m e r H a s E x p i r e d
0076360 ( l v s o c > > B S P S o c .
0076400 i n a c t i v i t y T i m e r )
0076420 t h e n \r [
0076440 R T P F 376 001 \0 304 023 S M ( s o c
0076460 , C L S T , 0 ) ; r e t u
0076500 r n ] / / C o n n e c t
0076520 i o n h a s d i e d , a b
0076540 o r t i t \r \r i f s o
0076560 c > > B S P S o c . a c k P e n
0076600 d i n g t h e n S e n d A c
0076620 k ( s o c ) \r i f s o c
0076640 > > B S P S o c . i n t e r r u
0076660 p t O u t t h e n \r
0076700 [ \r l e t p b i
0076720 = S e a r c h T Q ( s o c ,
0076740 t r u e ) / / S e a r c
0076760 h f o r o u t s t a n d i n
0077000 g i n t e r r u p t \r
0077020 i f p b i n e 0 t h
0077040 e n C o m p l e t 376 001 \0 t 333 e
0077060 P u p ( p b i ) / / R e t
0077100 r a n s m i t i f f o u n d
0077120 o n e \r ] \r \r
0077140 / / G e n e r a t e A D a
0077160 t a p r o b e u n c o n d i
0077200 t i o n a l l y . I f w e
0077220 h a v e n o d a t a t o
0077240 m o v e , \r / / p r o
0077260 b e o n c e e v e r y 1 5
0077300 s e c o n d s t o e n s u
0077320 r e t h a t t h e c o n n
0077340 e c t i o n i s a l i v e .
0077360 \r l e t p b i = G e
0077400 t P B I ( s o c , t r u e ) \r
0077420 t e s t p b i n e 0
0077440 \r i f s o \r 376
0077460 001 \0 } A [ / /
0077500 P r o b e w i t h z e r o -
0077520 l e n g t h A D a t a i f
0077540 c a n g e t p b i \r
0077560 u n l e s s s o c >
0077600 > B S P S o c . a c k R e q u e
0077620 s t e d d o \r
0077640 S e t T i m e r ( l v
0077660 s o c > > B S P S o c . l a s t
0077700 A D a t a T i m e , 0 ) \r
0077720 s o c > > B S P S
0077740 o c . a c k R e q u e s t e d
0077760 = t r u e \r
0100000 s o c > > B S P S o c . a D a t
0100020 a C o u n t = s o c > > B S
0100040 P S o c . a D a t a C o u n t +
0100060 1 \r 376 001 \0 032 n
0100100 S e t P u p I D ( p b i , l v
0100120 s o c > > B S P S o c . x m i
0100140 t B y t e I D ) \r
0100160 C o m p l e t e P u p ( p b
0100200 i , t y p e A D a t a , p u
0100220 p O v B y t e s ) \r
0100240 ] \r i f n o t
0100260 \r [ / /
0100300 P r o b e w i t h a p b i
0100320 o n t h e T Q o t h e r
0100340 w i s e \r p b
0100360 i = S e a r c h T Q ( s o c
0100400 , f a l s e ) / / L o o
0100420 k f o r a n o n - i n t e
0100440 r r u p t \r i
0100460 f p b i n e 376 001 \0 D 357 0
0100500 t h e n \r
0100520 [ T r a n s m i t S t r a t
0100540 e g y ( p b i , t r u e ) ;
0100560 C o m p l e t e P u p ( p b i )
0100600 ] \r ] \r
0100620 ] \r \r S e t T i m e o u t ( s
0100640 o c ) \r ] \r \r / / - - - - - - -
0100660 - - - - - - - - - - - - - - - -
*
0100760 - - - - - \r a n d S e n d A c
0101000 k ( s o c ) b e \r / / - - - -
0101020 - - - - - - - - - - - - - - - -
*
0101060 - - - - - - - - - - - - - - 376 001
0101100 \0 360 F - - - - - - - - - - - - -
0101120 - - - - - - - - - - - - - \r [ \r
0101140 l e t p b i = G e t P B I
0101160 ( s o c , t r u e ) ; i f
0101200 p b i n e 0 t h e n \r
0101220 [ \r s o c > > B S P S o
0101240 c . a c k P e n d i n g = f
0101260 a l s e \r S e t P u p I D
0101300 ( p b i , l v s o c > > B S
0101320 P S o c . r c v B y t e I D ) \r
0101340 p b i > > P B I . p u p .
0101360 w o r d s ^ 1 = m a x P u p
0101400 D a t a B y t e s / / B y
0101420 t e s p e r p u p \r p
0101440 b i > > P B I . p u p . w o r d
0101460 s ^ 2 = / / P u p a l
0101500 l o c 376 001 \0 374 > a t i o n \r
0101520 s o c > > B S P S o c .
0101540 m a x I P B I - 1 - s o c > > B
0101560 S P S o c . u n R e a d P u p s
0101600 \r p b i > > P B I . p u p
0101620 . w o r d s ^ 3 = / / B
0101640 y t e a l l o c a t i o n \r
0101660 m a x P u p D a t a B
0101700 y t e s * p b i > > P B I . p u
0101720 p . w o r d s ^ 2 \r s o c
0101740 > > B S P S o c . s e n t Z e r
0101760 o A l l o c = p b i > > P B
0102000 I . p u p . w o r d s ^ 2 e q
0102020 0 \r C o m p l e t e P u
0102040 p ( p b i , t y p e A c k ,
0102060 p u p O v B y t e s + 6 ) \r \r
0102100 / / F l u 376 001 \0 355 244 s h
0102120 r e c e i v e d d a t a p a
0102140 c k e t s w e a r e n ' t
0102160 a c k n o w l e d g i n g , s
0102200 i n c e \r / / w e k n
0102220 o w t h e y w i l l b e
0102240 r e t r a n s m i t t e d a n
0102260 d w e d o n ' t w a n t
0102300 t h e \r / / r e t r a n
0102320 s m i s s i o n s t o o v e
0102340 r f l o w o u r s o c k e t
0102360 I Q i f w e a r e s l
0102400 o w \r / / i n p r o c
0102420 e s s i n g t h e m . \r
0102440 w h i l e s o c > > B S P S o
0102460 c . b s p I Q . h e a d n e
0102500 0 d o \r [ \r 376 001 \0
0102520 g 006 p b i = s o
0102540 c > > B S P S o c . b s p I Q .
0102560 t a i l \r i f D o
0102600 u b l e D i f f e r e n c e ( l
0102620 v p b i > > P B I . p u p . i
0102640 d , \r l v s o c
0102660 > > B S P S o c . r c v B y t e
0102700 I D ) l s 0 t h e n b r
0102720 e a k \r U n q u e u
0102740 e ( l v s o c > > B S P S o c
0102760 . b s p I Q , p b i ) \r
0103000 R e l e a s e P B I ( p b
0103020 i ) \r ] \r ] \r
0103040 ] \r \f \r / / - - - - - - - - - -
0103060 - - - - - - - - - - - - - - - -
*
0103120 - - 376 001 \0 \r 340 - - - - - - - - -
0103140 - - - - - - - - - - - - - - - -
0103160 - - - - - - - \r a n d S e a r
0103200 c h T Q ( s o c , l o o k F o
0103220 r I n t e r r u p t ) = v a
0103240 l o f \r / / - - - - - - - - - -
0103260 - - - - - - - - - - - - - - - -
*
0103360 - - \r / / U n q u e u e s a
0103400 n d r e t u r n s t h e l
0103420 a s t p b i o n t h e B
0103440 S P T Q , l o o k i n g f
0103460 o r \r / / a n I n t e r r u
0103500 p t i f l o o k F o r I n t
0103520 e r r u p t 376 001 \0 024 j i s t
0103540 r u e , a n y t h i n g e l
0103560 s e i f f a l s e . \r / /
0103600 W e r e t u r n t h e l a
0103620 s t p b i ( r a t h e r t
0103640 h a n t h e f i r s t ) s
0103660 o t h a t r e t r a n s m i
0103700 t t i n g i t \r / / l e a v
0103720 e s t h e o r d e r o f
0103740 p b i s o n t h e T Q u
0103760 n c h a n g e d . R e t u r
0104000 n s z e r o i f n o n e
0104020 f o u n d . \r [ \r l e t r p b
0104040 i = 0 \r l e t p b i =
0104060 s o c > > B S P S o c . b s p T
0104100 Q . h e a d \r w h i l e p b i
0104120 n e 0 d o \r 376 001 \0 214
0104140 274 [ \r i f ( p b i > > P
0104160 B I . p u p . t y p e e q t
0104200 y p e I n t e r r u p t ) e q
0104220 v l o o k F o r I n t e r r u
0104240 p t t h e n \r [
0104260 r p b i = p b i ; b r e a
0104300 k ] \r p b i = p b i
0104320 ! 0 \r ] \r i f r p b i
0104340 n e 0 t h e n U n q u e u
0104360 e ( l v s o c > > B S P S o c
0104400 . b s p T Q , r p b i ) \r r e
0104420 s u l t i s r p b i \r ] \r \r /
0104440 / - - - - - - - - - - - - - - -
0104460 - - - - - - - - - - - - - - - -
*
0104540 - 376 001 \0 \v % - - - - - - - - - -
0104560 - - \r a n d T r a n s m i t S
0104600 t r a t e g y ( p b i , m a k
0104620 e A ; n u m a r g s n a )
0104640 b e \r / / - - - - - - - - - - -
0104660 - - - - - - - - - - - - - - - -
*
0104760 - \r / / D i d d l e s t y p
0105000 e d e p e n d i n g o n m
0105020 a k e A o r a l l o c a t i
0105040 o n r e m a i n i n g . \r / /
0105060 C u r r e n t a l g o r i t
0105100 h m i s t h a t w e s e
0105120 n d A D a t a w h e n a l
0105140 l o c a t i 376 001 \0 305 235 o n \r / /
0105160 f a l l s b e l o w 3 3 %
0105200 o f t h a t g i v e n i
0105220 n t h e l a s t r e c e i
0105240 v e d A c k . \r / / T h i s
0105260 m a y b e e x p r e s s e
0105300 d a s : \r / / p u p A l
0105320 l o c l e k * ( p u p A
0105340 l l o c + u n A c k e d P u
0105360 p s ) \r / / w h e r e k =
0105400 0 . 3 3 a n d i t i s
0105420 a s s u m e d t h a t p u p
0105440 A l l o c + u n A c k e d P u p
0105460 s \r / / g i v e s t h e o
0105500 r i g i n a l P u p a l l o
0105520 c a t i o n . T h i s i s
0105540 e q u i v a l e n t 376 001 \0 T \0
0105560 t o \r / / ( 1 - k ) / k
0105600 * p u p A l l o c l e u
0105620 n A c k e d P u p s . \r / / F
0105640 o r k = 0 . 3 3 , ( 1 -
0105660 k ) / k = 2 . T h i s
0105700 i s t h e d e r i v a t i o
0105720 n o f t h e \r / / c o m p
0105740 a r i s o n " p u p A l l o c
0105760 l s h i f t 1 l e s o c
0106000 > > B S P S o c . u n A c k e d
0106020 P u p s " b e l o w . \r [ \r l
0106040 e t s o c = p b i > > P B
0106060 I . s o c k e t \r u n l e s s
0106100 n a g r 1 & m a k e A
0106120 d o \r t e s t s o c > >
0106140 B S P S o c . a c k R e q u e s
0106160 376 001 \0 371 277 t e d \r i
0106200 f s o m a k e A = f a l s
0106220 e \r i f n o t \r
0106240 [ \r
0106260 l e t p u p A l l o c =
0106300 M i n ( M i n ( M i n ( s o c
0106320 > > B S P S o c . p u p A l l o
0106340 c , \r s
0106360 o c > > B S P S o c . b y t e A
0106400 l l o c / s o c > > B S P S o c
0106420 . b y t e s P e r P u p ) , \r
0106440 s o c > >
0106460 B S P S o c . n u m O P B I - 1
0106500 ) , s o c > > B S P S o c . n
0106520 u m T P B I - 1 ) \r
0106540 m a k e A = ( o v e r
0106560 l a p D a 376 001 \0 214 261 t a W i t h
0106600 A c k ? \r
0106620 p u p A l l o c l s h i f t
0106640 1 l e s o c > > B S P S o
0106660 c . u n A c k e d P u p s , \r
0106700 p u p A l
0106720 l o c l e 0 ) \r
0106740 ] \r i f m a k e A t h
0106760 e n \r [ \r / / U n
0107000 l e s s a n A D a t a i s
0107020 a l r e a d y o u t s t a n
0107040 d i n g , s t a r t m e a s
0107060 u r i n g \r / / t h e
0107100 r o u n d - t r i p d e l a y
0107120 f o r c o m p u t i n g t
0107140 h e a d a p t i v e t i m e
0107160 o u t . \r u n 376 001 \0 347 P l
0107200 e s s s o c > > B S P S o c .
0107220 a c k R e q u e s t e d d o \r
0107240 S e t T i m e r ( l
0107260 v s o c > > B S P S o c . l a
0107300 s t A D a t a T i m e , 0 ) \r
0107320 s o c > > B S P S o c . a
0107340 c k R e q u e s t e d = t r
0107360 u e \r s o c > > B S P S o
0107400 c . a D a t a C o u n t = s
0107420 o c > > B S P S o c . a D a t a
0107440 C o u n t + 1 \r ] \r p b i
0107460 > > P B I . p u p . t y p e =
0107500 s e l e c t o n p b i > > P
0107520 B I . p u p . t y p e i n t o
0107540 \r [ \r c a s e t y
0107560 p e D a t a : \r c a s e 376
0107600 001 \0 226 203 t y p e A D a t a :
0107620 m a k e A ? t y p e A D a t a
0107640 , t y p e D a t a \r c a
0107660 s e t y p e M a r k : \r
0107700 c a s e t y p e A M a r k :
0107720 m a k e A ? t y p e A M a r k
0107740 , t y p e M a r k \r ] \r
0107760 ] \r \r / / - - - - - - - - - - -
0110000 - - - - - - - - - - - - - - - -
*
0110100 - \r a n d S e t T i m e o u t
0110120 ( s o c ) b e \r / / - - - - -
0110140 - - - - - - - - - - - - - - - -
*
0110200 - - - - 376 001 \0 > 5 - - - - - - -
0110220 - - - - - - - - - - - - - - - -
0110240 - - - - - - - - - - - - \r S e t
0110260 T i m e r ( l v s o c > > B S
0110300 P S o c . b s p T i m e r , (
0110320 s o c > > B S P S o c . i n t e
0110340 r r u p t O u t % \r s o c >
0110360 > B S P S o c . u n A c k e d P
0110400 u p s g r 0 % s o c > >
0110420 B S P S o c . p u p A l l o c
0110440 l e 0 % \r s o c > > B S P
0110460 S o c . b y t e A l l o c l e
0110500 0 % s o c > > B S P S o c
0110520 . b y t e s P e r P u p l e
0110540 0 ) ? \r ( s o c > > B S P
0110560 S o c . a c k R e q u e s t e d
0110600 ? s o c > > B S 376 \0 ] 201 310 P S
0110620 o c . a D a t a T i m e o u t ,
0110640 \r M a x ( s o c > > B S P
0110660 S o c . a D a t a T i m e o u t
0110700 , o u t s t a n d i n g D a t
0110720 a T i m e o u t ) ) , \r i d
0110740 l e T i m e o u t ) \r 377 \0 \0 P u
0110760 p B S P a . a s m \0 373 231 020 037 s \0
0111000 \0 376 001 \0 z 023 ; C o p y r i g h
0111020 t X e r o x C o r p o r a t
0111040 i o n 1 9 7 9 , 1 9 8 0 ,
0111060 1 9 8 2 \r \r ; P u p B S P a .
0111100 a s m - - A s s e m b l y -
0111120 l a n g u a g e r o u t i n e
0111140 s f o r B S P \r ; \t \t - C
0111160 o m p a n i o n t o P u p B
0111200 S P b . b c p l \r \r ; L a s t
0111220 m o d i f i e d M a y 1 7
0111240 , 1 9 8 2 2 : 1 0 P M
0111260 b y T a f t \r \r . e n t B S
0111300 P G e t s \r . e n t B S P P u
0111320 t s \r \r . b e x t B S P G e t
0111340 C l e a n u p \r . b e x t B S
0111360 P F o r c e O u t p u t \r . b e
0111400 x t o f f 376 001 \0 " 327 s e t B S
0111420 P S t r \r \r . s r e l \r \r B S P
0111440 G e t s : . B S P G e t s \r B
0111460 S P P u t s : . B S P P u t s
0111500 \r \r . n r e l \r \r \r ; R o u t
0111520 i n e s i m p l e m e n t i n
0111540 g f a s t B S P s t r e a
0111560 m s \r \r ; T h e B S P s t
0111600 r e a m s t r u c t u r e i
0111620 s a s s u m e d t o b e
0111640 t h e f o l l o w i n g : \r ;
0111660 \t @ S T \t \t ; W o r d s 0 -
0111700 1 1 . \r \t i P B I = 1 2 . \t ;
0111720 C u r r e n t i n p u t p a
0111740 c k e t b u f f e r i t e m
0111760 \r \t i W o r d P = 1 3 . \t ; P
0112000 t r t o w o r d 376 001 \0 017 202
0112020 c o n t a i n i n g n e x t
0112040 b y t e \r \t i B y t e P = 1 4 .
0112060 \t ; N e x t b y t e p o s
0112100 i t i o n : 0 = l e f t , 1
0112120 = r i g h t \r \t i B y t e C = 1
0112140 5 . \t ; I n p u t r e m a i
0112160 n i n g b y t e c o u n t \r
0112200 \t o P B I = 1 6 . \t ; C u r r
0112220 e n t o u t p u t p a c k e
0112240 t b u f f e r i t e m \r \t o
0112260 W o r d P = 1 7 . \t ; P t r
0112300 t o w o r d c o n t a i n i
0112320 n g n e x t b y t e \r \t o B
0112340 y t e P = 1 8 . \t ; N e x t
0112360 b y t e p o s i t i o n : 0
0112400 = l e f t , 1 = r i g h t \r \t
0112420 376 001 \0 A 313 o B y t e C = 1 9 . \t
0112440 ; O u t p u t r e m a i n i
0112460 n g b y t e c o u n t \r \r \r
0112500 ; B S P G e t s ( s t r ) -
0112520 r e t u r n s n e x t b y
0112540 t e f r o m B S P S t r e
0112560 a m \r \r . B S P G e t s : \r \t s
0112600 t a 3 1 2 \t \t ; S a v e
0112620 i n c r e m e n t e d r e t
0112640 u r n \r \t i s z 1 2 \r \t m o
0112660 v 0 3 \t \t \t ; S t r e a m
0112700 p o i n t e r \r \t l d a 0
0112720 @ i W o r d P 3 \t \t ; G e t
0112740 w o r d c o n t a i n i n g
0112760 d e s i r e d b y t e \r \t d
0113000 s z i B y t e P 3 \t \t ; W
0113020 h i c h 376 001 \0 j m b y t e ? \r
0113040 \t j m p g e t e v n \t \t ;
0113060 L e f t b y t e \r \r ; G e t
0113100 r i g h t ( o d d ) b y t
0113120 e a n d a d v a n c e w o
0113140 r d p o i n t e r \r \t l d a
0113160 1 c 3 7 7 \t \t ; M a s k r
0113200 i g h t b y t e \r \t a n d 1
0113220 0 \r \t i s z i W o r d P 3
0113240 \t \t ; A d v a n c e w o r d
0113260 p o i n t e r \r \t d s z i B
0113300 y t e C 3 \t \t ; D e c r e m
0113320 e n t a n d t e s t c o u
0113340 n t \r \t j m p @ 1 2 \t \t ;
0113360 N o t e x h a u s t e d ,
0113400 r e t u r n \r \t j m p g e t s
0113420 1 \t \t ; E x h a u 376 001 \0 312 260 s
0113440 t e d \r \r ; G e t l e f t
0113460 ( e v e n ) b y t e \r g e t e
0113500 v n : \t l d a 1 c 1 7 7 4 0
0113520 0 \t \t ; M a s k l e f t b
0113540 y t e \r \t a n d s 1 0 \t \t ;
0113560 R i g h t - j u s t i f y \r \t
0113600 m k o n e 1 1 \t \t ; R e s
0113620 e t b y t e p o s i t i o n
0113640 \r \t s t a 1 i B y t e P 3
0113660 \r \t d s z i B y t e C 3 \t \t
0113700 ; D e c r e m e n t a n d
0113720 t e s t c o u n t \r \t j m p
0113740 @ 1 2 \t \t ; N o t e x h
0113760 a u s t e d , r e t u r n \r \r
0114000 ; C o u n t n o w e x h a
0114020 u s t e d , c a l l c l e 376
0114040 001 \0 256 6 a n u p p r o c e d u
0114060 r e \r g e t s 1 : \t m o v 0
0114100 1 \t \t \t ; S a v e d a t a
0114120 b y t e \r \t m o v 3 0 \r \t l
0114140 d a 3 @ l v o f f s e t B S
0114160 P S t r \t ; C o n v e r t s
0114200 t r t o s o c \r \t s u b 3
0114220 0 \r \t l d a 3 @ l v B S P
0114240 G e t C l e a n u p \t ; B S P
0114260 G e t C l e a n u p ( s o c ,
0114300 b y t e ) \r \t j m p b c p l E
0114320 x i t \r \f \r ; F a s t B S P
0114340 s t r e a m s ( c o n t ' d
0114360 ) \r \r ; B S P P u t s ( s t r
0114400 , b y t e ) - o u t p u t
0114420 s b y t e o n B S P S t
0114440 r e a m 376 001 \0 266 A \r \r . B S P P
0114460 u t s : \r \t s t a 3 1 2 \t
0114500 \t ; S a v e i n c r e m e n
0114520 t e d r e t u r n \r \t i s z
0114540 1 2 \r \t m o v 0 3 \t \t \t ;
0114560 S t r e a m p o i n t e r \r
0114600 \t l d a 0 c 3 7 7 \t \t ; G
0114620 e t b y t e m a s k \r \t d s
0114640 z o B y t e P 3 \t \t ; W h
0114660 i c h b y t e ? \r \t j m p
0114700 p u t e v n \t \t ; L e f t b
0114720 y t e \r \r ; S t o r e r i g
0114740 h t ( o d d ) b y t e a n
0114760 d a d v a n c e w o r d p
0115000 o i n t e r \r \t a n d 0 1 \t
0115020 \t \t ; M a s k o u t g a r
0115040 b a g e i n l 376 001 \0 364 7 h
0115060 o f b y t e \r \t l d a 0 @
0115100 o W o r d P 3 \t \t ; G e t
0115120 p r e v i o u s l y s t o r e
0115140 d l h b y t e \r \t a d d 0
0115160 1 \t \t \t ; A p p e n d r h
0115200 b y t e \r \t s t a 1 @ o W
0115220 o r d P 3 \t \t ; S t o r e
0115240 i t b a c k \r \t i s z o W o
0115260 r d P 3 \t \t ; A d v a n c e
0115300 w o r d p o i n t e r \r \t m
0115320 k m i n u s o n e 0 0 \t \t ;
0115340 P r e p a r e t o r e t u
0115360 r n t r u e \r \t d s z o B y
0115400 t e C 3 \t \t ; D e c r e m e
0115420 n t a n d t e s t c o u n
0115440 t \r \t j m p @ 1 2 \t \t 376 001
0115460 \0 X M ; N o t e x h a u s t
0115500 e d , r e t u r n \r \t j m p
0115520 p u t s 1 \t \t ; E x h a u s t
0115540 e d \r \r ; S t o r e e v e n
0115560 ( l e f t ) b y t e \r p u t
0115600 e v n : \t a n d s 0 1 \t \t ;
0115620 M a s k b y t e a n d p
0115640 u t i n l h \r \t s t a 1
0115660 @ o W o r d P 3 \t \t ; S t o
0115700 r e i t ( c l e a r r h
0115720 b y t e ) \r \t m k o n e 1 1
0115740 \t \t ; R e s e t b y t e p
0115760 o s i t i o n \r \t s t a 1 o
0116000 B y t e P 3 \r \t m k m i n u s
0116020 o n e 0 0 \t \t ; P r e p a
0116040 r e t o r e t u r n t r u
0116060 e \r \t 376 001 \0 v 322 d s z o B y t
0116100 e C 3 \t \t ; D e c r e m e n
0116120 t a n d t e s t c o u n t
0116140 \r \t j m p @ 1 2 \t \t ; N
0116160 o t e x h a u s t e d , r e
0116200 t u r n \r \r ; C o u n t n o
0116220 w e x h a u s t e d , c a l
0116240 l c l e a n u p p r o c e d
0116260 u r e \r p u t s 1 : \t m o v 3
0116300 0 \r \t l d a 3 @ l v o f f
0116320 s e t B S P S t r \t ; C o n v
0116340 e r t s t r t o s o c \r \t
0116360 s u b 3 0 \r \t m k z e r o
0116400 1 1 \r \t l d a 3 @ l v B S
0116420 P F o r c e O u t p u t \t ; B
0116440 S P F o r c e O u t p u t ( s o
0116460 c , f a l s e 376 \0 362 \a 364 ) \r b
0116500 c p l E x i t : \r \t s t a 3
0116520 2 2 \t \t ; B c p l p r o c
0116540 e d u r e w e e x i t t o
0116560 \r \t d s z 1 2 \t \t \t ; R e
0116600 s t o r e o r i g i n a l r
0116620 e t u r n P C \r \t l d a 3
0116640 1 2 \r \t j m p @ 2 2 \r \r l
0116660 v B S P G e t C l e a n u p :
0116700 B S P G e t C l e a n u p \r l v
0116720 B S P F o r c e O u t p u t :
0116740 B S P F o r c e O u t p u t \r l
0116760 v o f f s e t B S P S t r : o
0117000 f f s e t B S P S t r \r \r c 3 7
0117020 7 : \t 3 7 7 \r c 1 7 7 4 0 0 :
0117040 1 7 7 4 0 0 \r \r \r \t . e n d \r 377
0117060 \0 \0 P u p B S P B l o c k . b c
0117100 p l \0 373 226 y : 367 \0 \0 376 001 \0 215 i /
0117120 / P u p B S P B l o c k . b c
0117140 p l - - p r o c e d u r e s
0117160 f o r f a s t B S P t r
0117200 a n s f e r s \r / / C o p y r
0117220 i g h t X e r o x C o r p o
0117240 r a t i o n 1 9 7 9 , 1 9 8
0117260 0 \r / / L a s t m o d i f i
0117300 e d D e c e m b e r 3 0 ,
0117320 1 9 8 0 5 : 3 5 P M b y
0117340 B o g g s \r \r g e t " p u p
0117360 . d e c l " \r \r e x t e r n a l
0117400 \r [ \r / / O u t g o i n g p
0117420 r o c e d u r e s \r B S P R e a
0117440 d B l o c k ; B S P W r i t e
0117460 B l o c k \r \r / / I n c o m i
0117500 n g p r o c e d u r e s \r B 376
0117520 001 \0 321 C S P P r e p a r e I P B
0117540 I ; B S P G e t C l e a n u p
0117560 ; B S P P r e p a r e O P B I
0117600 ; B S P F o r c e O u t p u t
0117620 \r B y t e B l t ; M i n ; E
0117640 r r o r s \r \r / / S t a t i c
0117660 s \r o f f s e t B S P S t r \r ]
0117700 \r \r s t r u c t u r e [ l h
0117720 b y t e ; r h b y t e ]
0117740 \r \r \r / / - - - - - - - - - -
0117760 - - - - - - - - - - - - - - - -
*
0120060 - \r l e t B S P R e a d B l o
0120100 c k ( s t r , w o r d P , b
0120120 y t e P 376 001 \0 270 @ , c o u n t
0120140 , t i m e o u t ; n u m a r
0120160 g s n a ) = v a l o f \r / /
0120200 - - - - - - - - - - - - - - -
0120220 - - - - - - - - - - - - - - - -
*
0120300 - - - - - - - - - - - - \r / /
0120320 R e a d a m a x i m u m o
0120340 f c o u n t b y t e s f r
0120360 o m t h e B S P s t r e a
0120400 m s t r , \r / / s t o r i n
0120420 g t h e m s t a r t i n g
0120440 a t a d d r e s s w o r d P
0120460 i n b y t e b y t e P (
0120500 0 = l e f t , \r / / 1 = r i g
0120520 h t h a l f ) . 376 001 \0 233 265
0120540 t i m e o u t ( o p t i o n a
0120560 l ) i s d e f i n e d a s
0120600 f o r B S P G e t B y t e .
0120620 \r / / R e t u r n s t h e
0120640 a c t u a l n u m b e r o f
0120660 b y t e s r e a d . \r [ \r l
0120700 e t s o c = s t r - o f f
0120720 s e t B S P S t r \r l e t b y
0120740 t e s S o F a r = 0 \r w h i
0120760 l e c o u n t g r 0 d o
0121000 \r [ \r / / E n s u
0121020 r e t h e r e i s a t l
0121040 e a s t o n e b y t e t o
0121060 r e a d , g e t t i n g n
0121100 e w i P B I i f n e c e s
0121120 s a r y \r l e t e c 376 001
0121140 \0 \a 233 = B S P P r e p a r e
0121160 I P B I ( s o c , ( n a g e
0121200 5 ? t i m e o u t , - 1 )
0121220 ) \r i f e c n e 0
0121240 t h e n [ E r r o r s ( s t
0121260 r , e c ) ; b r e a k ] \r
0121300 \r / / T r a n s f e r
0121320 a s m a n y b y t e s a s
0121340 w e c a n \r l e t c
0121360 = M i n ( s t r > > B S P S
0121400 t r . i B y t e C , c o u n t
0121420 ) \r B y t e B l t ( w o r
0121440 d P , b y t e P , s t r > >
0121460 B S P S t r . i W o r d P , s
0121500 t r > > B S P S t r . i B y t e
0121520 P , c ) \r \r / / A d j
0121540 u s t 376 001 \0 340 W c o u n t s
0121560 a n d p o i n t e r s t o
0121600 a c c o u n t f o r b y t e
0121620 s j u s t t r a n s f e r r
0121640 e d \r s t r > > B S P S t
0121660 r . i W o r d P = s t r > >
0121700 B S P S t r . i W o r d P +
0121720 ( c + s t r > > B S P S t r . i
0121740 B y t e P ) r s h i f t 1 \r
0121760 s t r > > B S P S t r . i
0122000 B y t e P = ( c + s t r > >
0122020 B S P S t r . i B y t e P ) &
0122040 1 \r s t r > > B S P S t
0122060 r . i B y t e C = s t r > >
0122100 B S P S t r . i B y t e C -
0122120 c \r w o r d P = w o r
0122140 d P + ( c + b y 376 001 \0 5 ( t e P
0122160 ) r s h i f t 1 \r b y
0122200 t e P = ( c + b y t e P )
0122220 & 1 \r b y t e s S o F a
0122240 r = b y t e s S o F a r + c
0122260 \r c o u n t = c o u n
0122300 t - c \r \r / / C l e a n
0122320 u p s t r e a m i f c u
0122340 r r e n t i P B I i s e x
0122360 h a u s t e d \r i f s t
0122400 r > > B S P S t r . i B y t e C
0122420 e q 0 t h e n B S P G e
0122440 t C l e a n u p ( s o c ) \r
0122460 ] \r r e s u l t i s b y t e
0122500 s S o F a r \r ] \r \f \r / / - -
0122520 - - - - - - - - - - - - - - - -
0122540 - - - - - - - - - - - - - 376 001 \0
0122560 ; A - - - - - - - - - - - - - -
0122600 - - - - - - - - - - - - - - - -
0122620 - - - - - - - - - - - - - - \r a
0122640 n d B S P W r i t e B l o c k
0122660 ( s t r , w o r d P , b y t
0122700 e P , c o u n t , t i m e o
0122720 u t ; n u m a r g s n a ) =
0122740 v a l o f \r / / - - - - - -
0122760 - - - - - - - - - - - - - - - -
*
0123060 - - - - - \r / / W r i t e a
0123100 m a x i m u m o f c o u n
0123120 t b y t e s i n t o t h e
0123140 B S P s t r e a m s t r ,
0123160 g 376 001 \0 \ \0 e t t i n g \r / /
0123200 t h e m s t a r t i n g a
0123220 t a d d r e s s w o r d P
0123240 i n b y t e b y t e P ( 0
0123260 = l e f t , \r / / 1 = r i g h
0123300 t h a l f ) . t i m e o u
0123320 t ( o p t i o n a l ) i s
0123340 d e f i n e d a s f o r B
0123360 S P P u t B y t e . \r / / R e
0123400 t u r n s t h e a c t u a l
0123420 n u m b e r o f b y t e s
0123440 w r i t t e n . \r [ \r l e t
0123460 s o c = s t r - o f f s e t
0123500 B S P S t r \r l e t b y t e s
0123520 S o F a r = 0 \r w h i l e
0123540 c o u n t g r 0 d o \r
0123560 [ \r / 376 001 \0 J - / E n
0123600 s u r e t h e r e i s a n
0123620 o P B I s e t u p \r
0123640 l e t e c = B S P P r e p
0123660 a r e O P B I ( s o c , ( n a
0123700 g e 5 ? t i m e o u t ,
0123720 - 1 ) ) \r i f e c n e
0123740 0 t h e n [ E r r o r s
0123760 ( s t r , e c ) ; b r e a k
0124000 ] \r \r / / T r a n s f
0124020 e r a s m a n y b y t e s
0124040 a s w e c a n \r l e
0124060 t c = M i n ( s t r > > B
0124100 S P S t r . o B y t e C , c o
0124120 u n t ) \r B y t e B l t (
0124140 s t r > > B S P S t r . o W o r
0124160 d P , s t r > > B S P 376 001 \0 x
0124200 351 S t r . o B y t e P , w o r
0124220 d P , b y t e P , c ) \r \r
0124240 / / A d j u s t c o u n
0124260 t s a n d p o i n t e r s
0124300 t o a c c o u n t f o r b
0124320 y t e s j u s t t r a n s f
0124340 e r r e d \r s t r > > B S
0124360 P S t r . o W o r d P = s t
0124400 r > > B S P S t r . o W o r d P
0124420 + ( c + s t r > > B S P S t
0124440 r . o B y t e P ) r s h i f t
0124460 1 \r s t r > > B S P S t
0124500 r . o B y t e P = ( c + s t
0124520 r > > B S P S t r . o B y t e P
0124540 ) & 1 \r s t r > > B S
0124560 P S t r . o B y t e C = s t
0124600 r 376 001 \0 240 361 > > B S P S t r . o
0124620 B y t e C - c \r w o r
0124640 d P = w o r d P + ( c + b y
0124660 t e P ) r s h i f t 1 \r
0124700 b y t e P = ( c + b y t e
0124720 P ) & 1 \r b y t e s S
0124740 o F a r = b y t e s S o F a
0124760 r + c \r c o u n t = c
0125000 o u n t - c \r \r / / E n
0125020 s u r e t h a t i f t h e
0125040 l a s t b y t e t r a n s
0125060 f e r r e d w a s t o t h
0125100 e l e f t h a l f , t h e
0125120 \r / / r i g h t h a l
0125140 f i s z e r o . n . b .
0125160 t h i s m a y c l o b b e
0125200 r o n e 376 001 \0 C o w o r d
0125220 b e y o n d t h e e n d \r
0125240 / / o f t h e d a t a
0125260 p o r t i o n o f t h e
0125300 P u p , b u t t h a t ' s
0125320 t h e c h e c k s u m w o r
0125340 d , s o o k . \r s t r
0125360 > > B S P S t r . o W o r d P >
0125400 > r h = 0 \r \r / / C
0125420 l e a n u p s t r e a m i
0125440 f c u r r e n t o P B I i
0125460 s f u l l \r i f s t r
0125500 > > B S P S t r . o B y t e C
0125520 e q 0 t h e n B S P F o r
0125540 c e O u t p u t ( s o c ) \r
0125560 ] \r r e s u l t i s b y t e
0125600 s S o F a r \r ] \r \r \r 377 \0 \0 P u
0125620 p R T P . d e c l \0 373 224 024 027 " \0
0125640 \0 376 001 \0 003 260 / / P u p R T P .
0125660 d e c l - - P u b l i c d
0125700 e c l a r a t i o n s f o r
0125720 R e n d e z v o u s / T e r m i
0125740 n a t i o n P r o t o c o l \r
0125760 / / C o p y r i g h t X e r
0126000 o x C o r p o r a t i o n 1
0126020 9 7 9 \r \r / / L a s t m o d
0126040 i f i e d J a n u a r y 1 7
0126060 , 1 9 7 9 6 : 3 8 P M
0126100 b y B o g g s \r \r / / - - - -
0126120 - - - - - - - - - - - - - - - -
*
0126220 - - - - - - - - \r s t r u c t u
0126240 r e R T P 376 001 \0 036 037 S o c : \t
0126260 / / B e t w e e n r a w p
0126300 u p s a n d t h e R T P \r
0126320 / / - - - - - - - - - - - - - -
0126340 - - - - - - - - - - - - - - - -
*
0126420 - - - - - - - - - - - - - - \r [
0126440 \r @ P u p S o c \r c t x w o r
0126460 d \t \t / / c o n t e x t f o
0126500 r R T P S o c k e t P r o c e
0126520 s s \r r t p S t a t u s w o r
0126540 d = \r [ \r w a s L
0126560 i s t e n i n g b i t \t / /
0126600 p o r t i s o r w a s l
0126620 i s t e n i n g \r b l a n
0126640 k b i t 7 \r 376 001 \0 310 357
0126660 s t a t e b y t e \t \t / / F
0126700 S M s t a t e \r ] \r c o
0126720 n n I D ^ 1 , 2 w o r d \t \t /
0126740 / c o n n e c t i o n I D \r
0126760 r t p T i m e r w o r d \t \t /
0127000 / t i m e r f o r R T P
0127020 s t a t e c h a n g e s \r \r /
0127040 / e n t r i e s f o r c o
0127060 m m u n i c a t i o n w i t h
0127100 h i g h e r l e v e l s \r /
0127120 / * * * d o n o t c h a
0127140 n g e o r d e r w i t h o u
0127160 t c o n s u l t i n g P u p
0127200 B S P . d e c l * * * \r r t p
0127220 O t h e r P u p P r o c w o r
0127240 d \t / / p r o c e d u r e c
0127260 376 001 \0 006 346 a l l e d f o r n
0127300 o n - R T P p u p s \r r t p O
0127320 t h e r T i m e r w o r d \t /
0127340 / t i m e r f o r h i g h
0127360 e r l e v e l s \r r t p O t h
0127400 e r T i m e r P r o c w o r d
0127420 \t / / p r o c e d u r e c a
0127440 l l e d w h e n t i m e r
0127460 e x p i r e s \r ] \r m a n i f e
0127500 s t l e n R T P S o c = s
0127520 i z e R T P S o c / 1 6 \r \r \r
0127540 m a n i f e s t \r [ \r / / R T
0127560 P o p e n m o d e s \r m o d
0127600 e I n i t A n d W a i t = 0
0127620 \r m o d e I n i t A n d R e t u
0127640 r n = 1 \r m o d e L i s t e
0127660 n A n d W 376 001 \0 316 272 a i t =
0127700 2 \r m o d e L i s t e n A n d R
0127720 e t u r n = 3 \r m o d e I m
0127740 m e d i a t e O p e n = 4 \r
0127760 \r / / R T P F i n i t e s
0130000 t a t e m a c h i n e s o c
0130020 k e t s t a t e s \r s t a t e
0130040 C l o s e d = 0 \r s t a t e
0130060 R F C O u t = 1 \r s t a t e
0130100 L i s t e n i n g = 2 \r s t
0130120 a t e O p e n = 3 \r s t a t
0130140 e E n d I n = 4 \r s t a t e
0130160 E n d O u t = 5 \r s t a t e
0130200 D a l l y = 6 \r s t a t e A
0130220 b o r t = 7 \r \r / / R e n
0130240 d e z v o u s / T e r m i n a t
0130260 i o n p r o t o c 376 \0 s + T o
0130300 l \r t y p e R F C = # 1 0 \r
0130320 t y p e A b o r t = # 1 1 \r
0130340 t y p e E n d = # 1 2 \r t y
0130360 p e E n d R e p l y = # 1 3
0130400 \r \r / / E r r o r c o d e s
0130420 \r e c I m p r o p e r S t a t e
0130440 F o r E v e n t = 2 2 4 0 \r
0130460 ] \r 377 \0 \0 P u p R T P I n t e r
0130500 n a l . d e c l \0 373 224 024 027 # \0 \0
0130520 376 001 \0 y # / / P u p R t p I n t
0130540 e r n a l . d e c l - - P r
0130560 i v a t e d e f i n i t i o n
0130600 s f o r R T P \r / / C o p
0130620 y r i g h t X e r o x C o r
0130640 p o r a t i o n 1 9 7 9 \r \r /
0130660 / l a s t m o d i f i e d M
0130700 a r c h 8 , 1 9 7 8 5 :
0130720 0 5 P M \r \r g e t " P u p R
0130740 T P . d e c l " \r \r / / - - - -
0130760 - - - - - - - - - - - - - - - -
*
0131060 - - - - - - - - \r s t r u c t u
0131100 r e R T P C t x : / / R T
0131120 P c o n 376 001 \0 253 \n t e x t s
0131140 t r u c t u r e \r / / - - - - -
0131160 - - - - - - - - - - - - - - - -
*
0131260 - - - - - - - \r [ \r b l a n k
0131300 w o r d 3 \t / / s t a n d a r
0131320 d s t u f f \r s o c k e t w
0131340 o r d \t / / s o c k e t f o r
0131360 w h i c h c o n t e x t w
0131400 a s c r e a t e d \r z o n e
0131420 w o r d \t / / z o n e f r o m
0131440 w h i c h c o n t e x t a
0131460 l l o c a t e d \r c t x Q w o
0131500 r d \t / / c o n t e x t q u e
0131520 u e o n w h i c 376 001 \0 233 207 h
0131540 p u t \r u n c l e a n w o r
0131560 d \t / / n o n z e r o i f c
0131600 o n t e x t i s n o t i n
0131620 a c l e a n s t a t e \r ]
0131640 \r m a n i f e s t l e n R T P
0131660 C t x E x t r a = s i z e
0131700 R T P C t x / 1 6 - 3 \r \r m
0131720 a n i f e s t \r [ \r / / R T P
0131740 f i n i t e s t a t e m a c
0131760 h i n e s o c k e t s t a t
0132000 e s \r C L O S = s t a t e C
0132020 l o s e d \r R F C O = s t a
0132040 t e R F C O u t \r L I S T =
0132060 s t a t e L i s t e n i n g \r O
0132100 P E N = s t a t e O p e n \r
0132120 E N D I = s t a t e E n d 376
0132140 001 \0 360 o I n \r E N D O = s t
0132160 a t e E n d O u t \r D A L Y =
0132200 s t a t e D a l l y \r A B O R
0132220 = s t a t e A b o r t \r \r /
0132240 / R T P F i n i t e s t a t
0132260 e m a c h i n e e v e n t s
0132300 \r O P N C = 0 \t / / o p e n
0132320 a n d i n i t i a t e c o
0132340 n n e c t i o n \r O P N L =
0132360 1 \t / / o p e n a n d l i s
0132400 t e n \r O P N N = 2 \t / / o
0132420 p e n i m m e d i a t e l y
0132440 ( n o r e n d e z v o u s ) \r
0132460 C L S N = 3 \t / / c l o s e
0132500 n o r m a l l y \r C L S T =
0132520 4 \t / / c l o s e a b n o r
0132540 m a l l 376 001 \0 2 212 y ( e . g .
0132560 a f t e r t i m e o u t ) \r
0132600 R R F C = 5 \t / / r e c e i
0132620 v e d R F C \r R A B T = 6
0132640 \t / / r e c e i v e d A b o r
0132660 t \r R E N D = 7 \t / / r e c
0132700 e i v e d E n d \r R E N R =
0132720 8 \t / / r e c e i v e d E n
0132740 d R e p l y \r T I M O = 9 \t
0132760 / / f s m t i m e o u t \r \r /
0133000 / R T P F i n i t e s t a t
0133020 e m a c h i n e a c t i o n
0133040 s \r L E R R = # 0 B 8 \t / /
0133060 l o c a l e r r o r ( o u r
0133100 b u g , c a l l s S y s E
0133120 r r ) \r F E R R = # 1 B 8 \t
0133140 / / f o r e i g n 376 \0 362 331 276 e
0133160 r r o r ( h i s b u g , i
0133200 g n o r e d ) \r N O O P = #
0133220 2 B 8 \t / / n o a c t i o n \r
0133240 S A B T = # 3 B 8 \t / / s e
0133260 n d A b o r t \r O P N X =
0133300 # 4 B 8 \t / / c o m p l e t e
0133320 l o c a l l y - i n i t i a t e
0133340 d o p e n \r S R F 1 = # 5
0133360 B 8 \t / / s e n d i n i t i a
0133400 t i n g R F C \r S R F 2 =
0133420 # 6 B 8 \t / / s e n d a n s w
0133440 e r i n g R F C \r S E N D =
0133460 # 7 B 8 \t / / s e n d E n d
0133500 \r S E N R = # 1 0 B 8 \t / /
0133520 s e n d E n d R e p l y \r ] \r
0133540 377 \0 \0 P u p R T P O p e n C l o
0133560 s e . b c p l \0 373 230 \t 243 340 \0 \0 376
0133600 001 \0 \v P / / P u p R T P O p e
0133620 n C l o s e . b c p l - - R
0133640 e n d e z v o u s / T e r m i n
0133660 a t i o n P r o t o c o l \r /
0133700 / c o m p a n i o n m o d u
0133720 l e i s P u p R T P . b c p
0133740 l \r / / T h i s m o d u l e
0133760 c o n t a i n s i n f r e q
0134000 u e n t l y e x e c u t e d
0134020 c o d e w h i c h c a n s
0134040 w a p \r / / w i t h o u t a
0134060 f f e c t i n g p e r f o r m
0134100 a n c e . \r / / C o p y r i g
0134120 h t X e r o x C o r p o r a
0134140 t i o n 1 9 7 9 , 1 9 8 1 \r
0134160 \r / / l a s t m o d i f i e
0134200 d O c 376 001 \0 m 302 t o b e r 2
0134220 9 , 1 9 8 1 5 : 2 0 P M
0134240 b y T a f t \r \r g e t " P
0134260 u p 0 . d e c l " \r g e t " P
0134300 u p 1 . d e c l " \r g e t " P
0134320 u p R T P I n t e r n a l . d e
0134340 c l " \r \r e x t e r n a l \r [ \r
0134360 / / o u t g o i n g p r o c
0134400 e d u r e s \r O p e n R T P S o
0134420 c k e t ; C l o s e R T P S o
0134440 c k e t ; C o m p l e t e R T
0134460 P P u p \r R T P H a n d l e U n
0134500 c o m m o n P u p ; R T P F S
0134520 M ; B u i l d A b o r t \r \r /
0134540 / i n c o m i n g p r o c e
0134560 d u r e s \r R T P S o c k e t P
0134600 r o c e s s ; D 376 001 \0 020 267 e f
0134620 a u l t O t h e r P u p P r o c
0134640 ; R T P F i l t e r \r C o m p
0134660 l e t e P u p ; A p p e n d S
0134700 t r i n g T o P u p ; M u l t
0134720 E q \r S e t P u p D P o r t ;
0134740 S e t P u p I D \r I n i t i a l
0134760 i z e C o n t e x t ; B l o c
0135000 k \r E n q u e u e ; U n q u e
0135020 u e ; I n s e r t A f t e r \r
0135040 R e l e a s e P B I ; G e t P
0135060 B I \r Z e r o ; A l l o c a t
0135100 e ; F r e e ; M o v e B l o
0135120 c k \r D e f a u l t A r g s ;
0135140 N o o p ; S y s E r r \r S e t
0135160 T i m e r ; T i m e r H a s E
0135200 x p i r e d \r \r / / o u t 376 001
0135220 \0 x 226 g o i n g s t a t i c s
0135240 \r l R T P S o c \r \r / / i n c
0135260 o m i n g s t a t i c s \r r t
0135300 p S t a c k S i z e ; p u p L
0135320 e v e l 1 C t x \r p u p Z o n e
0135340 ; p u p C t x Q ; d e f a u
0135360 l t T i m e o u t \r ] \r \r s t a
0135400 t i c [ l R T P S o c =
0135420 l e n R T P S o c ] \r \f \r / /
0135440 - - - - - - - - - - - - - - - -
*
0135540 - - - - - - - - - - - - \r l e t
0135560 O p e n R T P S o c k e t ( s
0135600 o c , c t x Q , o p e n M o
0135620 d e , 376 001 \0 0 ' c o n n I D ,
0135640 o t h e r P r o c , t i m e
0135660 o u t , \r z o n e ; n u m a
0135700 r g s n a ) = v a l o f \r
0135720 / / - - - - - - - - - - - - - -
0135740 - - - - - - - - - - - - - - - -
*
0136020 - - - - - - - - - - - - - - \r [
0136040 \r l e t d e f a u l t I D =
0136060 v e c 1 ; S e t T i m e r
0136100 ( d e f a u l t I D , 0 ) ;
0136120 d e f a u l t I D ! 1 = s o
0136140 c \r D e f a u l t A r g s ( l v
0136160 n a , - 1 , p u p C t x Q
0136200 , m o d e I n i t A n d W a i
0136220 t , d e f a u 376 001 \0 336 302 l t I
0136240 D , \r D e f a u l t O t h
0136260 e r P u p P r o c , d e f a u
0136300 l t T i m e o u t , p u p Z o
0136320 n e ) \r l e t c t x = A l
0136340 l o c a t e ( z o n e , r t p
0136360 S t a c k S i z e ) \r I n i t i
0136400 a l i z e C o n t e x t ( c t x
0136420 , r t p S t a c k S i z e ,
0136440 R T P S o c k e t P r o c e s s
0136460 , l e n R T P C t x E x t r a
0136500 ) \r c t x > > R T P C t x . s o
0136520 c k e t = s o c / / l
0136540 i n k f r o m c o n t e x t
0136560 t o s o c k e t \r c t x > >
0136600 R T P C t x . z o n e = z o
0136620 n e / / z o n e f 376 001 \0
0136640 x 317 r o m w h i c h c o n t
0136660 e x t a l l o c a t e d \r c t
0136700 x > > R T P C t x . c t x Q =
0136720 c t x Q / / q u e u e
0136740 o n w h i c h c o n t e x t
0136760 p l a c e d \r t e s t c t x
0137000 Q e q p u p C t x Q / /
0137020 s a m e q u e u e a s P
0137040 u p L e v e l 1 ' s ? \r i
0137060 f s o I n s e r t A f t e r (
0137100 c t x Q , p u p L e v e l 1 C
0137120 t x , c t x ) / / b e s
0137140 t p o s i t i o n \r i f
0137160 n o t E n q u e u e ( c t x Q
0137200 , c t x ) \r s o c > > R T P S
0137220 o c . c t x = c t x / /
0137240 l 376 001 \0 [ 226 i n k f r o m
0137260 s o c k e t t o c o n t e x
0137300 t \r s o c > > R T P S o c . c o
0137320 n n I D ^ 1 = c o n n I D !
0137340 0 \r s o c > > R T P S o c . c o
0137360 n n I D ^ 2 = c o n n I D !
0137400 1 \r s o c > > R T P S o c . r t
0137420 p S t a t u s = 0 \r s o c >
0137440 > R T P S o c . r t p O t h e r
0137460 P u p P r o c = o t h e r P
0137500 r o c \r s o c > > R T P S o c .
0137520 r t p O t h e r T i m e r P r o
0137540 c = N o o p \r l e t i n i
0137560 t S t a t e = n i l \r s w i
0137600 t c h o n o p e n M o d e i
0137620 n t o \r [ \r c a s e
0137640 m o d e I n 376 001 \0 e f i t A n
0137660 d W a i t : c a s e m o d e
0137700 I n i t A n d R e t u r n : \r
0137720 [ \r i n i
0137740 t S t a t e = R F C O \r
0137760 R T P F S M ( s o c ,
0140000 O P N C ) \r i f o
0140020 p e n M o d e e q m o d e I
0140040 n i t A n d R e t u r n t h e
0140060 n r e s u l t i s t r u e \r
0140100 e n d c a s e \r
0140120 ] \r c a s e m o
0140140 d e L i s t e n A n d W a i t :
0140160 c a s e m o d e L i s t e n
0140200 A n d R e t u r n : \r
0140220 [ \r i n i t S t a
0140240 t e = L I S T ; s 376 001 \0 365
0140260 7 o c > > R T P S o c . w a s L
0140300 i s t e n i n g = t r u e \r
0140320 R T P F S M ( s o c
0140340 , O P N L ) \r i f
0140360 o p e n M o d e e q m o d
0140400 e L i s t e n A n d R e t u r n
0140420 t h e n r e s u l t i s t
0140440 r u e \r e n d c a s
0140460 e \r ] \r c a s
0140500 e m o d e I m m e d i a t e O
0140520 p e n : \r [ \r
0140540 R T P F S M ( s o c , O
0140560 P N N ) \r r e s u l
0140600 t i s t r u e \r ]
0140620 \r ] \r l e t o p e n T i
0140640 m e r , s t a t e = n i l
0140660 , 376 001 \0 U 020 n i l ; S e t T
0140700 i m e r ( l v o p e n T i m e
0140720 r , t i m e o u t ) \r [
0140740 \r B l o c k ( ) \r s
0140760 t a t e = s o c > > R T P S
0141000 o c . s t a t e \r ] r e
0141020 p e a t u n t i l s t a t e
0141040 n e i n i t S t a t e % T
0141060 i m e r H a s E x p i r e d ( l
0141100 v o p e n T i m e r ) \r i f
0141120 s t a t e e q O P E N %
0141140 s t a t e e q E N D I t h
0141160 e n r e s u l t i s t r u e
0141200 \r C l o s e R T P S o c k e t (
0141220 s o c , 0 ) ; r e s u l t i
0141240 s f a l s e \r ] \r \r / / - - -
0141260 - - - - - - 376 001 \0 F 312 - - - - -
0141300 - - - - - - - - - - - - - - - -
*
0141360 - - - - - - - - - - - - - - \r a
0141400 n d C l o s e R T P S o c k e
0141420 t ( s o c , t i m e o u t ;
0141440 n u m a r g s n a ) = v a
0141460 l o f \r / / - - - - - - - - - -
0141500 - - - - - - - - - - - - - - - -
0141520