/[rdesktop]/sourceforge.net/trunk/rdesktop/iso.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/iso.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 439 by astrand, Mon Aug 11 11:08:19 2003 UTC revision 733 by jsorg71, Mon Jul 5 19:09:07 2004 UTC
# Line 72  iso_send_connection_request(char *userna Line 72  iso_send_connection_request(char *userna
72    
73  /* Receive a message on the ISO layer, return code */  /* Receive a message on the ISO layer, return code */
74  static STREAM  static STREAM
75  iso_recv_msg(uint8 * code)  iso_recv_msg(uint8 * code, uint8 * rdpver)
76  {  {
77          STREAM s;          STREAM s;
78          uint16 length;          uint16 length;
79          uint8 version;          uint8 version;
80    
       next_packet:  
81          s = tcp_recv(NULL, 4);          s = tcp_recv(NULL, 4);
82          if (s == NULL)          if (s == NULL)
83                  return NULL;                  return NULL;
   
84          in_uint8(s, version);          in_uint8(s, version);
85          switch (version & 3)          if (rdpver != NULL)
86                    *rdpver = version;
87            if (version == 3)
88          {          {
89                  case 0:                  in_uint8s(s, 1);        /* pad */
90                          in_uint8(s, length);                  in_uint16_be(s, length);
91                          if (length & 0x80)          }
92                          {          else
93                                  length &= ~0x80;          {
94                                  next_be(s, length);                  in_uint8(s, length);
95                          }                  if (length & 0x80)
96                          break;                  {
97                            length &= ~0x80;
98                  case 3:                          next_be(s, length);
99                          in_uint8s(s, 1);        /* pad */                  }
                         in_uint16_be(s, length);  
                         break;  
   
                 default:  
                         error("TPKT v%d\n", version);  
                         return NULL;  
100          }          }
   
101          s = tcp_recv(s, length - 4);          s = tcp_recv(s, length - 4);
102          if (s == NULL)          if (s == NULL)
103                  return NULL;                  return NULL;
104            if (version != 3)
105          if ((version & 3) == 0)                  return s;
         {  
                 rdp5_process(s, version & 0x80);  
                 goto next_packet;  
         }  
   
106          in_uint8s(s, 1);        /* hdrlen */          in_uint8s(s, 1);        /* hdrlen */
107          in_uint8(s, *code);          in_uint8(s, *code);
   
108          if (*code == ISO_PDU_DT)          if (*code == ISO_PDU_DT)
109          {          {
110                  in_uint8s(s, 1);        /* eot */                  in_uint8s(s, 1);        /* eot */
111                  return s;                  return s;
112          }          }
   
113          in_uint8s(s, 5);        /* dst_ref, src_ref, class */          in_uint8s(s, 5);        /* dst_ref, src_ref, class */
114          return s;          return s;
115  }  }
# Line 162  iso_send(STREAM s) Line 148  iso_send(STREAM s)
148    
149  /* Receive ISO transport data packet */  /* Receive ISO transport data packet */
150  STREAM  STREAM
151  iso_recv(void)  iso_recv(uint8 * rdpver)
152  {  {
153          STREAM s;          STREAM s;
154          uint8 code;          uint8 code = 0;
155    
156          s = iso_recv_msg(&code);          s = iso_recv_msg(&code, rdpver);
157          if (s == NULL)          if (s == NULL)
158                  return NULL;                  return NULL;
159            if (rdpver != NULL)
160                    if (*rdpver != 3)
161                            return s;
162          if (code != ISO_PDU_DT)          if (code != ISO_PDU_DT)
163          {          {
164                  error("expected DT, got 0x%x\n", code);                  error("expected DT, got 0x%x\n", code);
165                  return NULL;                  return NULL;
166          }          }
   
167          return s;          return s;
168  }  }
169    
# Line 184  iso_recv(void) Line 171  iso_recv(void)
171  BOOL  BOOL
172  iso_connect(char *server, char *username)  iso_connect(char *server, char *username)
173  {  {
174          uint8 code;          uint8 code = 0;
175    
176          if (!tcp_connect(server))          if (!tcp_connect(server))
177                  return False;                  return False;
178    
179          iso_send_connection_request(username);          iso_send_connection_request(username);
180    
181          if (iso_recv_msg(&code) == NULL)          if (iso_recv_msg(&code, NULL) == NULL)
182                  return False;                  return False;
183    
184          if (code != ISO_PDU_CC)          if (code != ISO_PDU_CC)

Legend:
Removed from v.439  
changed lines
  Added in v.733

  ViewVC Help
Powered by ViewVC 1.1.26