Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. // C code:
  2. rc_packet *net_recv_packet(int sd)
  3. {
  4. int psize;
  5. static rc_packet packet = {0, 0, 0, { 0x00 }};
  6.  
  7. /* packet.size = packet.id = packet.cmd = 0; */
  8.  
  9. int ret = recv(sd, (char *) &psize, sizeof(int), 0);
  10.  
  11. if(ret == 0) {
  12. fprintf(stderr, "Connection lost.\n");
  13. connection_alive = 0;
  14. return NULL;
  15. }
  16.  
  17. if(ret != sizeof(int)) {
  18. fprintf(stderr, "Error: recv() failed. Invalid packet size (%d).\n", ret);
  19. connection_alive = 0;
  20. return NULL;
  21. }
  22.  
  23. if(psize < 10 || psize > DATA_BUFFSIZE) {
  24. fprintf(stderr, "Warning: invalid packet size (%d). Must over 10 and less than %d.\n", psize, DATA_BUFFSIZE);
  25. if(psize > DATA_BUFFSIZE || psize < 0) psize = DATA_BUFFSIZE;
  26. net_clean_incoming(sd, psize);
  27. return NULL;
  28. }
  29.  
  30. packet.size = psize;
  31.  
  32. ret = recv(sd, (char *) &packet + sizeof(int), psize, 0);
  33. if(ret == 0) {
  34. fprintf(stderr, "Connection lost.\n");
  35. connection_alive = 0;
  36. return NULL;
  37. }
  38. if(ret != psize) {
  39. fprintf(stderr, "Warning: recv() return value (%d) does not match expected packet size (%d).\n", ret, psize);
  40. net_clean_incoming(sd, DATA_BUFFSIZE); /* Should be enough. Needs some checking */
  41. return NULL;
  42. }
  43.  
  44. return &packet;
  45. }
  46.  
  47. // Java code:
  48. Packet recvPacket()
  49. {
  50. Packet p = new Packet();
  51. try
  52. {
  53. // reader = new DataInputStream(sock.getInputStream()); // in the class constructor
  54. p.size = reader.readInt();
  55. if (p.size < 10 || p.size > buffsize)
  56. throw new Exception("Invalid packet size.");
  57. p.id = reader.readInt();
  58. p.cmd = reader.readInt();
  59. p.data = new byte[p.size - 8];
  60. for (int i = 0; i < p.data.length; i++)
  61. p.data[i] = reader.readByte();
  62. } catch (Exception e)
  63. {
  64. Util.printToConsole(e.getMessage()); //prints to a dedicated JTextArea
  65. return null;
  66. }
  67. return p;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement