Advertisement
eurolan

Opensips 2.2 crash gdb list

Jun 17th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.18 KB | None | 0 0
  1. (gdb) list
  2. 991 goto notfound;
  3. 992 if ( memcmp(p,name->s,name->len)!=0 ) {
  4. 993 p++;
  5. 994 continue;
  6. 995 }
  7. 996 p+=name->len;
  8. 997 while( p<end && (*p==' ' || *p=='\t') )
  9. 998 p++;
  10. 999 if (p==end|| *p==';') {
  11. 1000 /* empty val */
  12. (gdb)
  13. 1001 val->len = 0;
  14. 1002 val->s = 0;
  15. 1003 goto found;
  16. 1004 }
  17. 1005 if (*(p++)!='=')
  18. 1006 continue;
  19. 1007 while( p<end && (*p==' ' || *p=='\t') )
  20. 1008 p++;
  21. 1009 if (p==end)
  22. 1010 goto notfound;
  23. (gdb)
  24. 1011 /* get value */
  25. 1012 if ( *p=='\'' || *p=='"') {
  26. 1013 for( val->s = ++p ; p<end ; p++) {
  27. 1014 if ((*p=='"' || *p=='\'') && *(p-1)!='\\' )
  28. 1015 break;
  29. 1016 }
  30. 1017 } else {
  31. 1018 for( val->s=p ; p<end ; p++) {
  32. 1019 if ( (c=*p)==';' || c==' ' || c=='\t' )
  33. 1020 break;
  34. (gdb)
  35. 1021 }
  36. 1022 }
  37. 1023 val->len = p-val->s;
  38. 1024 if (val->len==0)
  39. 1025 val->s = 0;
  40. 1026 goto found;
  41. 1027 }
  42. 1028
  43. 1029 notfound:
  44. 1030 return -1;
  45. (gdb)
  46. 1031 found:
  47. 1032 return 0;
  48. 1033 }
  49. 1034
  50. 1035
  51. 1036 int is_direction(struct sip_msg * msg, int dir)
  52. 1037 {
  53. 1038 static str ftag_param = {"ftag",4};
  54. 1039 static unsigned int last_id = (unsigned int)-1;
  55. 1040 static unsigned int last_dir = 0;
  56. (gdb)
  57. 1041 str ftag_val;
  58. 1042 str tag;
  59. 1043
  60. 1044 if ( last_id==msg->id && last_dir!=0) {
  61. 1045 if (last_dir==RR_FLOW_UPSTREAM)
  62. 1046 goto upstream;
  63. 1047 else
  64. 1048 goto downstream;
  65. 1049 }
  66. 1050
  67. (gdb)
  68. 1051 ftag_val.s = 0;
  69. 1052 ftag_val.len = 0;
  70. 1053
  71. 1054 if (get_route_param( msg, &ftag_param, &ftag_val)!=0) {
  72. 1055 LM_DBG("param ftag not found\n");
  73. 1056 goto downstream;
  74. 1057 }
  75. 1058
  76. 1059 if ( ftag_val.s==0 || ftag_val.len==0 ) {
  77. 1060 LM_DBG("param ftag has empty val\n");
  78. (gdb)
  79. 1061 goto downstream;
  80. 1062 }
  81. 1063
  82. 1064 /* get the tag value from FROM hdr */
  83. 1065 if ( parse_from_header(msg)!=0 )
  84. 1066 goto downstream;
  85. 1067
  86. 1068 tag = ((struct to_body*)msg->from->parsed)->tag_value;
  87. 1069 if (tag.s==0 || tag.len==0)
  88. 1070 goto downstream;
  89. (gdb)
  90. 1071
  91. 1072 /* compare the 2 strings */
  92. 1073 if (tag.len!=ftag_val.len || memcmp(tag.s,ftag_val.s,ftag_val.len))
  93. 1074 goto upstream;
  94. 1075
  95. 1076 downstream:
  96. 1077 last_id = msg->id;
  97. 1078 last_dir = RR_FLOW_DOWNSTREAM;
  98. 1079 return (dir==RR_FLOW_DOWNSTREAM)?0:-1;
  99. 1080 upstream:
  100. (gdb)
  101. 1081 last_id = msg->id;
  102. 1082 last_dir = RR_FLOW_UPSTREAM;
  103. 1083 return (dir==RR_FLOW_UPSTREAM)?0:-1;
  104. 1084 }
  105. 1085
  106. 1086
  107. 1087 str* get_remote_target(struct sip_msg *msg)
  108. 1088 {
  109. 1089 int res;
  110. 1090 struct hdr_field *hdr;
  111. (gdb)
  112. 1091 rr_t *rt,*prev;
  113. 1092 str *uri;
  114. 1093 int routing_type;
  115. 1094
  116. 1095 if (msg == NULL) {
  117. 1096 LM_ERR("null sip msg\n");
  118. 1097 return 0;
  119. 1098 }
  120. 1099
  121. 1100 routing_type = ctx_routing_get();
  122. (gdb)
  123. 1101 if ((routing_type == ROUTING_LL) || (routing_type == ROUTING_LS))
  124. 1102 return &msg->first_line.u.request.uri;
  125. 1103 else if (routing_type == ROUTING_SL)
  126. 1104 /* set by loose_route(), recovered from previous strict routing */
  127. 1105 return &msg->new_uri;
  128. 1106 else if (routing_type == ROUTING_SS)
  129. 1107 {
  130. 1108 /* searching for last header field */
  131. 1109 res = find_rem_target(msg, &hdr, &rt, &prev);
  132. 1110 if (res < 0)
  133. (gdb)
  134. 1111 {
  135. 1112 LM_ERR("searching for last Route URI failed\n");
  136. 1113 return 0;
  137. 1114 }
  138. 1115 else if (res > 0)
  139. 1116 {
  140. 1117 /* No remote target is an error */
  141. 1118 LM_ERR("couldn't find any remote target !\n");
  142. 1119 return 0;
  143. 1120 }
  144. (gdb)
  145. 1121
  146. 1122 uri = &rt->nameaddr.uri;
  147. 1123 if(get_maddr_uri(uri, 0)!=0)
  148. 1124 {
  149. 1125 LM_ERR("failed to check maddr\n");
  150. 1126 return 0;
  151. 1127 }
  152. 1128
  153. 1129 return uri;
  154. 1130 }
  155. (gdb)
  156. 1131 else
  157. 1132 {
  158. 1133 LM_ERR("Invalid routing type - %d\n",routing_type);
  159. 1134 return 0;
  160. 1135 }
  161. 1136 }
  162. 1137
  163. 1138
  164. 1139 #define MAX_RR_HDRS 64
  165. 1140 str* get_route_set(struct sip_msg *msg,int *nr_routes)
  166. (gdb)
  167. 1141 {
  168. 1142 static str uris[MAX_RR_HDRS];
  169. 1143 struct hdr_field *it;
  170. 1144 rr_t *p;
  171. 1145 int n = 0;
  172. 1146 int routing_type;
  173. 1147
  174. 1148 if (msg == NULL || msg->route == NULL)
  175. 1149 {
  176. 1150 LM_ERR("null sip msg or no route headers\n");
  177. (gdb)
  178. 1151 return 0;
  179. 1152 }
  180. 1153
  181. 1154 routing_type = ctx_routing_get();
  182. 1155 if (routing_type == ROUTING_SS || routing_type == ROUTING_LS)
  183. 1156 {
  184. 1157 /* must manually insert RURI, as it was part
  185. 1158 * of the route deleted to make up for strict routing */
  186. 1159 uris[n++] = msg->new_uri;
  187. 1160 }
  188. (gdb)
  189. 1161
  190. 1162 it = msg->route;
  191. 1163 while (it != NULL)
  192. 1164 {
  193. 1165 if (parse_rr(it) < 0)
  194. 1166 {
  195. 1167 LM_ERR("failed to parse RR\n");
  196. 1168 return 0;
  197. 1169 }
  198. 1170
  199. (gdb)
  200. 1171 p = (rr_t*)it->parsed;
  201. 1172 while (p)
  202. 1173 {
  203. 1174 if (p->deleted == 0)
  204. 1175 {
  205. 1176 uris[n++] = p->nameaddr.uri;
  206. 1177 if(n==MAX_RR_HDRS)
  207. 1178 {
  208. 1179 LM_ERR("too many RR\n");
  209. 1180 return 0;
  210. (gdb)
  211. 1181 }
  212. 1182 }
  213. 1183 else
  214. 1184 LM_DBG("Route [%.*s] has been deleted\n",p->nameaddr.uri.len,
  215. 1185 p->nameaddr.uri.s);
  216. 1186 p = p->next;
  217. 1187 }
  218. 1188 it = it->sibling;
  219. 1189 }
  220. 1190
  221. (gdb)
  222. 1191
  223. 1192 /* if SS - remove last route */
  224. 1193 if (routing_type == ROUTING_SS)
  225. 1194 n--;
  226. 1195
  227. 1196 if (nr_routes)
  228. 1197 *nr_routes = n;
  229. 1198
  230. 1199 return uris;
  231. 1200 }
  232. (gdb)
  233. Line number 1201 out of range; loose.c has 1200 lines.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement