Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. #include<sys/socket.h>
  2. #include<netinet/in.h>
  3. #include<sys/types.h>
  4. #include<stdio.h>
  5. #include<string.h>
  6. #include<arpa/inet.h>
  7. #include<stdlib.h>
  8. #include<unistd.h>
  9. #include<inttypes.h>
  10. #include"server.h"
  11.  
  12. #define BUF_LENGHT 1024
  13.  
  14. uint16_t get_request(int socketfd, uint8_t *op, uint16_t *st, uint16_t *n, uint8_t **val){
  15. int i,ti;
  16. unsigned int len = 0;
  17. uint8_t *apdu = (uint8_t *) malloc(1);
  18.  
  19. ti = receive_modbus_request(socketfd, &apdu);
  20.  
  21. *op = apdu[0];
  22. if(*op == 0x03){
  23. *st = apdu[1];
  24. *st = *st << 8;
  25. *st = *st ^ apdu[2];
  26.  
  27. *n = apdu[3];
  28. *n = *n << 8;
  29. *n = *n ^ apdu[4];
  30.  
  31. len = 5;
  32. }
  33. else if(*op == 0x10){
  34. *st = apdu[1];
  35. *st = *st << 8;
  36. *st = *st ^ apdu[2];
  37.  
  38. *n = apdu[3];
  39. *n = *n << 8;
  40. *n = *n ^ apdu[4];
  41.  
  42. int B = apdu[5];
  43. len = 6 + B;
  44.  
  45. printf("\nst: %x, n: %x\n\n", *st,*n);
  46.  
  47. *val = (uint8_t *) malloc(B);
  48. for(i = 0; i < B; i++){
  49. val[i] = (uint8_t *) malloc(16);
  50. val[i] = &apdu[i+6];
  51. }
  52. }
  53. else{
  54. printf("Invalid function code\n");
  55. return -1;
  56. }
  57. printf("op: %x, len: %x\n",*op,len);
  58. printf("\nClient %d request:\n",ti);
  59. for(i = 0; i < len; i++)
  60. printf("apdu[%d]: %x \n",i, apdu[i]);
  61.  
  62. return ti;
  63. }
  64.  
  65. int send_response(int socketfd, uint8_t ti, uint8_t op, uint16_t st, uint16_t n, uint8_t *val){
  66. uint8_t *apdu, len;
  67.  
  68. if(op == 0x10){
  69. len = 5;
  70. apdu = (uint8_t *) malloc(len);
  71. apdu[0] = op;
  72. apdu[1] = st >> 8;
  73. apdu[2] = st;
  74. apdu[3] = n >> 8;
  75. apdu[4] = n;
  76. send_modbus_response(socketfd,apdu,len, ti);
  77. }
  78. if(op == 0x03){
  79. int B = n, i;
  80. len = 2 + B;
  81. apdu = (uint8_t *) malloc(len);
  82. apdu[0] = op;
  83. apdu[1] = B;
  84.  
  85. for(i = 2; i < len; i++)
  86. apdu[i] = val[i-2];
  87.  
  88. for(i = 0; i < len; i++)
  89. printf("apdu[%d]: %d\n",i,apdu[i]);
  90.  
  91. send_modbus_response(socketfd,apdu,len,ti);
  92. }
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement