Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // C code:
- rc_packet *net_recv_packet(int sd)
- {
- int psize;
- static rc_packet packet = {0, 0, 0, { 0x00 }};
- /* packet.size = packet.id = packet.cmd = 0; */
- int ret = recv(sd, (char *) &psize, sizeof(int), 0);
- if(ret == 0) {
- fprintf(stderr, "Connection lost.\n");
- connection_alive = 0;
- return NULL;
- }
- if(ret != sizeof(int)) {
- fprintf(stderr, "Error: recv() failed. Invalid packet size (%d).\n", ret);
- connection_alive = 0;
- return NULL;
- }
- if(psize < 10 || psize > DATA_BUFFSIZE) {
- fprintf(stderr, "Warning: invalid packet size (%d). Must over 10 and less than %d.\n", psize, DATA_BUFFSIZE);
- if(psize > DATA_BUFFSIZE || psize < 0) psize = DATA_BUFFSIZE;
- net_clean_incoming(sd, psize);
- return NULL;
- }
- packet.size = psize;
- ret = recv(sd, (char *) &packet + sizeof(int), psize, 0);
- if(ret == 0) {
- fprintf(stderr, "Connection lost.\n");
- connection_alive = 0;
- return NULL;
- }
- if(ret != psize) {
- fprintf(stderr, "Warning: recv() return value (%d) does not match expected packet size (%d).\n", ret, psize);
- net_clean_incoming(sd, DATA_BUFFSIZE); /* Should be enough. Needs some checking */
- return NULL;
- }
- return &packet;
- }
- // Java code:
- Packet recvPacket()
- {
- Packet p = new Packet();
- try
- {
- // reader = new DataInputStream(sock.getInputStream()); // in the class constructor
- p.size = reader.readInt();
- if (p.size < 10 || p.size > buffsize)
- throw new Exception("Invalid packet size.");
- p.id = reader.readInt();
- p.cmd = reader.readInt();
- p.data = new byte[p.size - 8];
- for (int i = 0; i < p.data.length; i++)
- p.data[i] = reader.readByte();
- } catch (Exception e)
- {
- Util.printToConsole(e.getMessage()); //prints to a dedicated JTextArea
- return null;
- }
- return p;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement