equal
deleted
inserted
replaced
72 void NetworkSend_Packet(Packet *packet, NetworkTCPSocketHandler *cs) |
72 void NetworkSend_Packet(Packet *packet, NetworkTCPSocketHandler *cs) |
73 { |
73 { |
74 Packet *p; |
74 Packet *p; |
75 assert(packet != NULL); |
75 assert(packet != NULL); |
76 |
76 |
77 packet->pos = 0; |
77 packet->PrepareToSend(); |
78 packet->next = NULL; |
|
79 |
|
80 NetworkSend_FillPacketSize(packet); |
|
81 |
78 |
82 /* Locate last packet buffered for the client */ |
79 /* Locate last packet buffered for the client */ |
83 p = cs->packet_queue; |
80 p = cs->packet_queue; |
84 if (p == NULL) { |
81 if (p == NULL) { |
85 /* No packets yet */ |
82 /* No packets yet */ |
131 |
128 |
132 /* Is this packet sent? */ |
129 /* Is this packet sent? */ |
133 if (p->pos == p->size) { |
130 if (p->pos == p->size) { |
134 /* Go to the next packet */ |
131 /* Go to the next packet */ |
135 cs->packet_queue = p->next; |
132 cs->packet_queue = p->next; |
136 free(p); |
133 delete p; |
137 p = cs->packet_queue; |
134 p = cs->packet_queue; |
138 } else { |
135 } else { |
139 return true; |
136 return true; |
140 } |
137 } |
141 } |
138 } |
157 *status = NETWORK_RECV_STATUS_OKAY; |
154 *status = NETWORK_RECV_STATUS_OKAY; |
158 |
155 |
159 if (!cs->IsConnected()) return NULL; |
156 if (!cs->IsConnected()) return NULL; |
160 |
157 |
161 if (cs->packet_recv == NULL) { |
158 if (cs->packet_recv == NULL) { |
162 cs->packet_recv = MallocT<Packet>(1); |
159 cs->packet_recv = new Packet(cs); |
163 if (cs->packet_recv == NULL) error("Failed to allocate packet"); |
160 if (cs->packet_recv == NULL) error("Failed to allocate packet"); |
164 /* Set pos to zero! */ |
|
165 cs->packet_recv->pos = 0; |
|
166 cs->packet_recv->size = 0; // Can be ommited, just for safety reasons |
|
167 } |
161 } |
168 |
162 |
169 p = cs->packet_recv; |
163 p = cs->packet_recv; |
170 |
164 |
171 /* Read packet size */ |
165 /* Read packet size */ |
190 return NULL; |
184 return NULL; |
191 } |
185 } |
192 p->pos += res; |
186 p->pos += res; |
193 } |
187 } |
194 |
188 |
195 NetworkRecv_ReadPacketSize(p); |
189 /* Read the packet size from the received packet */ |
|
190 p->ReadRawPacketSize(); |
196 |
191 |
197 if (p->size > SEND_MTU) { |
192 if (p->size > SEND_MTU) { |
198 *status = cs->CloseConnection(); |
193 *status = cs->CloseConnection(); |
199 return NULL; |
194 return NULL; |
200 } |
195 } |
221 } |
216 } |
222 |
217 |
223 p->pos += res; |
218 p->pos += res; |
224 } |
219 } |
225 |
220 |
226 /* We have a complete packet, return it! */ |
|
227 p->pos = 2; |
|
228 p->next = NULL; // Should not be needed, but who knows... |
|
229 |
|
230 /* Prepare for receiving a new packet */ |
221 /* Prepare for receiving a new packet */ |
231 cs->packet_recv = NULL; |
222 cs->packet_recv = NULL; |
232 |
223 |
|
224 p->PrepareToRead(); |
233 return p; |
225 return p; |
234 } |
226 } |
235 |
227 |
236 #endif /* ENABLE_NETWORK */ |
228 #endif /* ENABLE_NETWORK */ |