static str getUserAgent(struct sip_msg* msg) { static char buf[16] = "unknown-agent"; // buf is here for a reason. don't static str notfound = {buf, 13}; // use the constant string directly! str block, server; char *ptr; if (parse_headers(msg, HDR_USERAGENT_F, 0)==0 && msg->user_agent && msg->user_agent->body.s && msg->user_agent->body.len>0) { return msg->user_agent->body; } // If we can't find user-agent, look after the `Server' header // This is a temporary hack. Normally it should be extracted by openser. block.s = msg->buf; block.len = msg->len; ptr = findLineStartingWith(&block, "Server:", True); if (!ptr) return notfound; server.s = ptr + 7; server.len = findendline(server.s, block.s+block.len-server.s) - server.s; trim(&server); if (server.len == 0) return notfound; return server; }
// will get all media streams static int getMediaStreams(str *sdp, str *sessionIP, StreamInfo *streams, int limit) { str tokens[2], block, zone; char *ptr, *sdpEnd; int i, count, streamCount, result; sdpEnd = sdp->s + sdp->len; for (i=0, block=*sdp; i<limit; i++) { ptr = findLineStartingWith(&block, "m=", False); if (!ptr) break; zone.s = ptr + 2; zone.len = findendline(zone.s, sdpEnd - zone.s) - zone.s; count = getStrTokens(&zone, tokens, 2); if (count != 2) { LOG(L_ERR, "error: mediaproxy/getMediaStreams(): invalid `m=' " "line in SDP body\n"); return -1; } streams[i].type = tokens[0]; streams[i].port = tokens[1]; block.s = zone.s + zone.len; block.len = sdpEnd - block.s; } streamCount = i; for (i=0; i<streamCount; i++) { block.s = streams[i].port.s; if (i < streamCount-1) block.len = streams[i+1].port.s - block.s; else block.len = sdpEnd - block.s; result = getMediaIPFromBlock(&block, &(streams[i].ip)); if (result == -1) { LOG(L_ERR, "error: mediaproxy/getMediaStreams(): parse error in " "getting the contact IP for the media stream nr. %d\n", i+1); return -1; } else if (result == 0) { if (sessionIP->s == NULL) { LOG(L_ERR, "error: mediaproxy/getMediaStreams(): media stream " "doesn't define a contact IP and the session-level IP " "is missing\n"); return -1; } streams[i].ip = *sessionIP; streams[i].localIP = 0; } else { streams[i].localIP = 1; } } return streamCount; }