Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (gdb) list
- 991 goto notfound;
- 992 if ( memcmp(p,name->s,name->len)!=0 ) {
- 993 p++;
- 994 continue;
- 995 }
- 996 p+=name->len;
- 997 while( p<end && (*p==' ' || *p=='\t') )
- 998 p++;
- 999 if (p==end|| *p==';') {
- 1000 /* empty val */
- (gdb)
- 1001 val->len = 0;
- 1002 val->s = 0;
- 1003 goto found;
- 1004 }
- 1005 if (*(p++)!='=')
- 1006 continue;
- 1007 while( p<end && (*p==' ' || *p=='\t') )
- 1008 p++;
- 1009 if (p==end)
- 1010 goto notfound;
- (gdb)
- 1011 /* get value */
- 1012 if ( *p=='\'' || *p=='"') {
- 1013 for( val->s = ++p ; p<end ; p++) {
- 1014 if ((*p=='"' || *p=='\'') && *(p-1)!='\\' )
- 1015 break;
- 1016 }
- 1017 } else {
- 1018 for( val->s=p ; p<end ; p++) {
- 1019 if ( (c=*p)==';' || c==' ' || c=='\t' )
- 1020 break;
- (gdb)
- 1021 }
- 1022 }
- 1023 val->len = p-val->s;
- 1024 if (val->len==0)
- 1025 val->s = 0;
- 1026 goto found;
- 1027 }
- 1028
- 1029 notfound:
- 1030 return -1;
- (gdb)
- 1031 found:
- 1032 return 0;
- 1033 }
- 1034
- 1035
- 1036 int is_direction(struct sip_msg * msg, int dir)
- 1037 {
- 1038 static str ftag_param = {"ftag",4};
- 1039 static unsigned int last_id = (unsigned int)-1;
- 1040 static unsigned int last_dir = 0;
- (gdb)
- 1041 str ftag_val;
- 1042 str tag;
- 1043
- 1044 if ( last_id==msg->id && last_dir!=0) {
- 1045 if (last_dir==RR_FLOW_UPSTREAM)
- 1046 goto upstream;
- 1047 else
- 1048 goto downstream;
- 1049 }
- 1050
- (gdb)
- 1051 ftag_val.s = 0;
- 1052 ftag_val.len = 0;
- 1053
- 1054 if (get_route_param( msg, &ftag_param, &ftag_val)!=0) {
- 1055 LM_DBG("param ftag not found\n");
- 1056 goto downstream;
- 1057 }
- 1058
- 1059 if ( ftag_val.s==0 || ftag_val.len==0 ) {
- 1060 LM_DBG("param ftag has empty val\n");
- (gdb)
- 1061 goto downstream;
- 1062 }
- 1063
- 1064 /* get the tag value from FROM hdr */
- 1065 if ( parse_from_header(msg)!=0 )
- 1066 goto downstream;
- 1067
- 1068 tag = ((struct to_body*)msg->from->parsed)->tag_value;
- 1069 if (tag.s==0 || tag.len==0)
- 1070 goto downstream;
- (gdb)
- 1071
- 1072 /* compare the 2 strings */
- 1073 if (tag.len!=ftag_val.len || memcmp(tag.s,ftag_val.s,ftag_val.len))
- 1074 goto upstream;
- 1075
- 1076 downstream:
- 1077 last_id = msg->id;
- 1078 last_dir = RR_FLOW_DOWNSTREAM;
- 1079 return (dir==RR_FLOW_DOWNSTREAM)?0:-1;
- 1080 upstream:
- (gdb)
- 1081 last_id = msg->id;
- 1082 last_dir = RR_FLOW_UPSTREAM;
- 1083 return (dir==RR_FLOW_UPSTREAM)?0:-1;
- 1084 }
- 1085
- 1086
- 1087 str* get_remote_target(struct sip_msg *msg)
- 1088 {
- 1089 int res;
- 1090 struct hdr_field *hdr;
- (gdb)
- 1091 rr_t *rt,*prev;
- 1092 str *uri;
- 1093 int routing_type;
- 1094
- 1095 if (msg == NULL) {
- 1096 LM_ERR("null sip msg\n");
- 1097 return 0;
- 1098 }
- 1099
- 1100 routing_type = ctx_routing_get();
- (gdb)
- 1101 if ((routing_type == ROUTING_LL) || (routing_type == ROUTING_LS))
- 1102 return &msg->first_line.u.request.uri;
- 1103 else if (routing_type == ROUTING_SL)
- 1104 /* set by loose_route(), recovered from previous strict routing */
- 1105 return &msg->new_uri;
- 1106 else if (routing_type == ROUTING_SS)
- 1107 {
- 1108 /* searching for last header field */
- 1109 res = find_rem_target(msg, &hdr, &rt, &prev);
- 1110 if (res < 0)
- (gdb)
- 1111 {
- 1112 LM_ERR("searching for last Route URI failed\n");
- 1113 return 0;
- 1114 }
- 1115 else if (res > 0)
- 1116 {
- 1117 /* No remote target is an error */
- 1118 LM_ERR("couldn't find any remote target !\n");
- 1119 return 0;
- 1120 }
- (gdb)
- 1121
- 1122 uri = &rt->nameaddr.uri;
- 1123 if(get_maddr_uri(uri, 0)!=0)
- 1124 {
- 1125 LM_ERR("failed to check maddr\n");
- 1126 return 0;
- 1127 }
- 1128
- 1129 return uri;
- 1130 }
- (gdb)
- 1131 else
- 1132 {
- 1133 LM_ERR("Invalid routing type - %d\n",routing_type);
- 1134 return 0;
- 1135 }
- 1136 }
- 1137
- 1138
- 1139 #define MAX_RR_HDRS 64
- 1140 str* get_route_set(struct sip_msg *msg,int *nr_routes)
- (gdb)
- 1141 {
- 1142 static str uris[MAX_RR_HDRS];
- 1143 struct hdr_field *it;
- 1144 rr_t *p;
- 1145 int n = 0;
- 1146 int routing_type;
- 1147
- 1148 if (msg == NULL || msg->route == NULL)
- 1149 {
- 1150 LM_ERR("null sip msg or no route headers\n");
- (gdb)
- 1151 return 0;
- 1152 }
- 1153
- 1154 routing_type = ctx_routing_get();
- 1155 if (routing_type == ROUTING_SS || routing_type == ROUTING_LS)
- 1156 {
- 1157 /* must manually insert RURI, as it was part
- 1158 * of the route deleted to make up for strict routing */
- 1159 uris[n++] = msg->new_uri;
- 1160 }
- (gdb)
- 1161
- 1162 it = msg->route;
- 1163 while (it != NULL)
- 1164 {
- 1165 if (parse_rr(it) < 0)
- 1166 {
- 1167 LM_ERR("failed to parse RR\n");
- 1168 return 0;
- 1169 }
- 1170
- (gdb)
- 1171 p = (rr_t*)it->parsed;
- 1172 while (p)
- 1173 {
- 1174 if (p->deleted == 0)
- 1175 {
- 1176 uris[n++] = p->nameaddr.uri;
- 1177 if(n==MAX_RR_HDRS)
- 1178 {
- 1179 LM_ERR("too many RR\n");
- 1180 return 0;
- (gdb)
- 1181 }
- 1182 }
- 1183 else
- 1184 LM_DBG("Route [%.*s] has been deleted\n",p->nameaddr.uri.len,
- 1185 p->nameaddr.uri.s);
- 1186 p = p->next;
- 1187 }
- 1188 it = it->sibling;
- 1189 }
- 1190
- (gdb)
- 1191
- 1192 /* if SS - remove last route */
- 1193 if (routing_type == ROUTING_SS)
- 1194 n--;
- 1195
- 1196 if (nr_routes)
- 1197 *nr_routes = n;
- 1198
- 1199 return uris;
- 1200 }
- (gdb)
- Line number 1201 out of range; loose.c has 1200 lines.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement