PageRenderTime 43ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/typechk.c

https://bitbucket.org/spapas/cwmpclient
C | 189 lines | 143 code | 18 blank | 28 comment | 114 complexity | 37a856d29e0243d57e90ee6328b99547 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. /* Papastefanos Serafeim */
  2. /* Sunarthseis gia elegxo tupwn */
  3. #include "client.h"
  4. #include "typechk.h"
  5. #include "ctype.h"
  6. #include "stdio.h"
  7. #include "string.h"
  8. #include "helpers.h"
  9. #include "custom.h"
  10. #include <stdlib.h>
  11. #include <limits.h>
  12. /* H sunarthsh auth pairnei mia lista parametrwn pou prokeitai na
  13. * perastei sthn handleSetParameterValues kai enan pinaka apo
  14. * akeraious, me mege9os iso me th lista paraketrwn. Elegxei ka9e
  15. * mia apo tis parametrous ths listas xrhsimopoiwntas thn checkParameter
  16. * h opoia vrisketai sto custom.c kai an uparxei provlhma
  17. * ti9etai sthn katallhlh 9esh tou pinaka errors h timh tou sfalmatos.
  18. * An ginei estw kai ena sfalma epistrefetai to -INVALID_ARGUMENTS,
  19. * opote h sunarthsh pou kalese thn checkSetParameterValues 9a
  20. * elegjei kai ton pinaka errors gia mh mhdenikes times wste na
  21. * vrei pou akrivws egine to la9os / la9h. */
  22. int checkSetParameterValues(ParameterValueList *parameterList, int *errors) {
  23. unsigned int i;
  24. int ok = 1;
  25. int r = 0;
  26. for(i=0;i<parameterList->size;i++) errors[i]=0;
  27. for(i=0;i<parameterList->size;i++) {
  28. StateVariable *sv = getStateVariable(parameterList->parameters[i].name);
  29. if(sv->writable==0) {
  30. ok = 0;
  31. errors[i]=-ATTEMPT_TO_SET_NON_WRITABLE;
  32. } else if( (r=checkParameter(parameterList->parameters[i]))!=0) {
  33. ok = 0;
  34. errors[i]=r;
  35. }
  36. }
  37. if(ok==0) return -INVALID_ARGUMENTS; else return 0;
  38. }
  39. /* Elegxei an to string buf einai katallhlou mege9ous */
  40. int checkString(char *buf, unsigned int len) {
  41. if(buf == NULL) return -INTERNAL_ERROR;
  42. if(strlen(buf) > len) return -INVALID_PARAMETER_VALUE;
  43. return 0;
  44. }
  45. /* Elegxei an sto buf uparxei katallhlos akeraios */
  46. int checkInt(char *buf) {
  47. if(buf == NULL) return -INTERNAL_ERROR;
  48. long int tmp = strtol(buf, NULL, 10);
  49. if(tmp == LONG_MAX || tmp == LONG_MIN) return -INVALID_PARAMETER_VALUE;
  50. int i=0;
  51. while(isspace(buf[i]) && buf[i]!=0 ) i++;
  52. if(buf[i]==0) return -INVALID_PARAMETER_TYPE;
  53. if(!isdigit(buf[i])) {
  54. if(buf[i]!='+' && buf[i]!='-') return -INVALID_PARAMETER_TYPE;
  55. i++;
  56. }
  57. while(isdigit(buf[i])&& buf[i]!=0) i++;
  58. if(buf[i]==0) return 0;
  59. else if(isspace(buf[i])) {
  60. while(isspace(buf[i])&& buf[i]!=0) i++;
  61. if(buf[i]==0) return 0;
  62. else return -INVALID_PARAMETER_TYPE;
  63. } else return -INVALID_PARAMETER_TYPE;
  64. return 0;
  65. }
  66. /* Elegxei an sto buf uparxei katallhlos aproshmos akeraios */
  67. int checkUnsignedInt(char *buf) {
  68. if(buf == NULL) return -INTERNAL_ERROR;
  69. long int tmp = strtol(buf, NULL, 10);
  70. if(tmp == LONG_MAX || tmp == LONG_MIN) return -INVALID_PARAMETER_VALUE;
  71. int i=0;
  72. while(isspace(buf[i]) && buf[i]!=0 ) i++;
  73. if(buf[i]==0) return -INVALID_PARAMETER_TYPE;
  74. if(!isdigit(buf[i])) -INVALID_PARAMETER_TYPE;
  75. while(isdigit(buf[i])&& buf[i]!=0) i++;
  76. if(buf[i]==0) return 0;
  77. else if(isspace(buf[i])) {
  78. while(isspace(buf[i])&& buf[i]!=0) i++;
  79. if(buf[i]==0) return 0;
  80. else return -INVALID_PARAMETER_TYPE;
  81. } else return -INVALID_PARAMETER_TYPE;
  82. return 0;
  83. }
  84. /* Elegxei an sto buf uparxei 0 h 1 (boolean) */
  85. int checkBoolean(char *buf) {
  86. int i=0;
  87. if(buf == NULL) return -INTERNAL_ERROR;
  88. while(isspace(buf[i]) && buf[i]!=0 ) i++;
  89. if(buf[i]==0) return -INVALID_PARAMETER_TYPE;
  90. if( (buf[i]!='0')&& (buf[i]!='1') ) return -INVALID_PARAMETER_TYPE;
  91. i++;
  92. if(buf[i]==0) return 0;
  93. else if(isspace(buf[i])) {
  94. while(isspace(buf[i])&& buf[i]!=0) i++;
  95. if(buf[i]==0) return 1;
  96. else return -INVALID_PARAMETER_TYPE;
  97. } else return -INVALID_PARAMETER_TYPE;
  98. return 0;
  99. }
  100. /* Elegxei an sto buf uparxei DateTime */
  101. int checkDateTime(char *buf) {
  102. int i=0;
  103. if(buf == NULL) return -INTERNAL_ERROR;
  104. while(isspace(buf[i]) && buf[i]!=0 ) i++;
  105. if(buf[i]==0) return -INVALID_PARAMETER_TYPE;
  106. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  107. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  108. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  109. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  110. if(buf[i]=='-') i++; else return -INVALID_PARAMETER_TYPE;
  111. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  112. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  113. if(buf[i]=='-') i++; else return -INVALID_PARAMETER_TYPE;
  114. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  115. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  116. if(buf[i]=='T') i++; else return -INVALID_PARAMETER_TYPE;
  117. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  118. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  119. if(buf[i]==':') i++; else return -INVALID_PARAMETER_TYPE;
  120. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  121. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  122. if(buf[i]==':') i++; else return -INVALID_PARAMETER_TYPE;
  123. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  124. if(isdigit(buf[i])) i++; else return -INVALID_PARAMETER_TYPE;
  125. if(buf[i]==0) return 0;
  126. else if(isspace(buf[i])) {
  127. while(isspace(buf[i])&& buf[i]!=0) i++;
  128. if(buf[i]==0) return 1;
  129. else return -INVALID_PARAMETER_TYPE;
  130. } else return -INVALID_PARAMETER_TYPE;
  131. return 0;
  132. }
  133. /* Elegxei an sto buf uparxei base64 mege9ous len. Ena base64 string
  134. * epitrepetai na exei tous xarakthres A-Z, a-z, 0-9, +, / kai =. An
  135. * uparxei allos xarakthras 9a epistrafei -INVALID_PARAMTER_TYPE. */
  136. int checkBase64(char *buf, unsigned int len) {
  137. unsigned int i;
  138. if(buf == NULL) return -INTERNAL_ERROR;
  139. if(strlen(buf) > len) return -INVALID_PARAMETER_VALUE;
  140. for(i=0;i<strlen(buf);i++) {
  141. if( isalpha(buf[i]) || isdigit(buf[i]) ) continue ;
  142. if( (buf[i] == '+')||(buf[i] == '/')||buf[i] == '=' ) continue ;
  143. return -INVALID_PARAMETER_TYPE;
  144. }
  145. return 0;
  146. }
  147. /* Epistrefei ton akeraio pou uparxei sto buf. Kaleitai mono afou
  148. * exei hdh klh9ei h checkInt */
  149. long int parseInt(char *buf) {
  150. return( strtol(buf, NULL, 10) );
  151. }
  152. /* Epistrefei ton aproshmo pou uparxei sto buf. Kaleitai mono afou
  153. * exei hdh klh9ei h checkUnsignedInt */
  154. unsigned long int parseUnsignedInt(char *buf) {
  155. return( strtoul(buf, NULL, 10) );
  156. }
  157. /* Epistrefei ton boolean pou uparxei sto buf. Kaleitai mono afou
  158. * exei hdh klh9ei h checkBoolean */
  159. int parseBoolean(char *buf) {
  160. if(atoi(buf) == 0) return 0;
  161. else return 1;
  162. }
  163. /* Epistrefei to DateTime pou uparxei sto buf. Kaleitai mono afou
  164. * exei hdh klh9ei h checkDateTime */
  165. DateTime parseDateTime(char *buf) {
  166. int i=0;
  167. while(isspace(buf[i]))i++;
  168. DateTime *dt=ascitodate(&buf[i]);
  169. DateTime dateTime = *dt;
  170. return dateTime;
  171. }