1
0

handler.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef HV_JSON_RPC_HANDLER_H_
  2. #define HV_JSON_RPC_HANDLER_H_
  3. #include "router.h"
  4. void error_response(cJSON* jres, int code, const char* message) {
  5. cJSON* jerror = cJSON_CreateObject();
  6. cJSON_AddItemToObject(jerror, "code", cJSON_CreateNumber(code));
  7. cJSON_AddItemToObject(jerror, "message", cJSON_CreateString(message));
  8. cJSON_AddItemToObject(jres, "error", jerror);
  9. }
  10. void not_found(cJSON* jreq, cJSON* jres) {
  11. error_response(jres, 404, "Not Found");
  12. }
  13. void bad_request(cJSON* jreq, cJSON* jres) {
  14. error_response(jres, 400, "Bad Request");
  15. }
  16. void calc_add(cJSON* jreq, cJSON* jres) {
  17. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  18. if (cJSON_GetArraySize(jparams) != 2) {
  19. return bad_request(jreq, jres);
  20. }
  21. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  22. int num1 = cJSON_GetNumberValue(jnum1);
  23. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  24. int num2 = cJSON_GetNumberValue(jnum2);
  25. int result = num1 + num2;
  26. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  27. }
  28. void calc_sub(cJSON* jreq, cJSON* jres) {
  29. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  30. if (cJSON_GetArraySize(jparams) != 2) {
  31. return bad_request(jreq, jres);
  32. }
  33. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  34. int num1 = cJSON_GetNumberValue(jnum1);
  35. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  36. int num2 = cJSON_GetNumberValue(jnum2);
  37. int result = num1 - num2;
  38. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  39. }
  40. void calc_mul(cJSON* jreq, cJSON* jres) {
  41. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  42. if (cJSON_GetArraySize(jparams) != 2) {
  43. return bad_request(jreq, jres);
  44. }
  45. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  46. int num1 = cJSON_GetNumberValue(jnum1);
  47. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  48. int num2 = cJSON_GetNumberValue(jnum2);
  49. int result = num1 * num2;
  50. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  51. }
  52. void calc_div(cJSON* jreq, cJSON* jres) {
  53. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  54. if (cJSON_GetArraySize(jparams) != 2) {
  55. return bad_request(jreq, jres);
  56. }
  57. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  58. int num1 = cJSON_GetNumberValue(jnum1);
  59. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  60. int num2 = cJSON_GetNumberValue(jnum2);
  61. if (num2 == 0) {
  62. return bad_request(jreq, jres);
  63. } else {
  64. int result = num1 / num2;
  65. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  66. }
  67. }
  68. #endif // HV_JSON_RPC_ROUTER_H_