handler.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. bad_request(jreq, jres);
  20. return;
  21. }
  22. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  23. int num1 = cJSON_GetNumberValue(jnum1);
  24. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  25. int num2 = cJSON_GetNumberValue(jnum2);
  26. int result = num1 + num2;
  27. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  28. }
  29. void calc_sub(cJSON* jreq, cJSON* jres) {
  30. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  31. if (cJSON_GetArraySize(jparams) != 2) {
  32. bad_request(jreq, jres);
  33. return;
  34. }
  35. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  36. int num1 = cJSON_GetNumberValue(jnum1);
  37. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  38. int num2 = cJSON_GetNumberValue(jnum2);
  39. int result = num1 - num2;
  40. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  41. }
  42. void calc_mul(cJSON* jreq, cJSON* jres) {
  43. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  44. if (cJSON_GetArraySize(jparams) != 2) {
  45. bad_request(jreq, jres);
  46. return;
  47. }
  48. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  49. int num1 = cJSON_GetNumberValue(jnum1);
  50. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  51. int num2 = cJSON_GetNumberValue(jnum2);
  52. int result = num1 * num2;
  53. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  54. }
  55. void calc_div(cJSON* jreq, cJSON* jres) {
  56. cJSON* jparams = cJSON_GetObjectItem(jreq, "params");
  57. if (cJSON_GetArraySize(jparams) != 2) {
  58. bad_request(jreq, jres);
  59. return;
  60. }
  61. cJSON* jnum1 = cJSON_GetArrayItem(jparams, 0);
  62. int num1 = cJSON_GetNumberValue(jnum1);
  63. cJSON* jnum2 = cJSON_GetArrayItem(jparams, 1);
  64. int num2 = cJSON_GetNumberValue(jnum2);
  65. if (num2 == 0) {
  66. bad_request(jreq, jres);
  67. return;
  68. } else {
  69. int result = num1 / num2;
  70. cJSON_AddItemToObject(jres, "result", cJSON_CreateNumber(result));
  71. }
  72. }
  73. #endif // HV_JSON_RPC_ROUTER_H_