static void headers_read(pa_rtsp_client *c) { char* token; char delimiters[] = ";"; pa_assert(c); pa_assert(c->response_headers); pa_assert(c->callback); /* Deal with a SETUP response */ if (STATE_SETUP == c->state) { const char* token_state = NULL; const char* pc = NULL; c->session = pa_xstrdup(pa_headerlist_gets(c->response_headers, "Session")); c->transport = pa_xstrdup(pa_headerlist_gets(c->response_headers, "Transport")); if (!c->session || !c->transport) { pa_log("Invalid SETUP response."); return; } /* Now parse out the server port component of the response. */ while ((token = pa_split(c->transport, delimiters, &token_state))) { if ((pc = strchr(token, '='))) { if (0 == strncmp(token, "server_port", 11)) { uint32_t p; if (pa_atou(pc + 1, &p) < 0 || p <= 0 || p > 0xffff) { pa_log("Invalid SETUP response (invalid server_port)."); pa_xfree(token); return; } c->rtp_port = p; pa_xfree(token); break; } } pa_xfree(token); } if (0 == c->rtp_port) { /* Error no server_port in response */ pa_log("Invalid SETUP response (no port number)."); return; } } /* Call our callback */ c->callback(c, c->state, c->response_headers, c->userdata); }
const char* pa_rtsp_get_header(pa_rtsp_client *c, const char *key) { pa_assert(c); pa_assert(key); return pa_headerlist_gets(c->headers, key); }