| 165 | |
| 166 | |
| 167 | enum parse_sst_result |
| 168 | parse_session_expires( struct sip_msg *msg, struct session_expires *se ) |
| 169 | { |
| 170 | enum parse_sst_result result; |
| 171 | |
| 172 | if (msg->session_expires==NULL && |
| 173 | parse_headers(msg,HDR_SESSION_EXPIRES_F,0)!=0 ) { |
| 174 | LM_ERR("failed to parse message when looking for Session-Expires \n"); |
| 175 | return parse_sst_header_not_found; |
| 176 | } |
| 177 | |
| 178 | if ( msg->session_expires ) { |
| 179 | if ( msg->session_expires->parsed == 0 |
| 180 | && (result = parse_session_expires_body(msg->session_expires)) |
| 181 | != parse_sst_success ) { |
| 182 | if (result!=parse_sst_out_of_mem) { |
| 183 | set_err_info(OSER_EC_PARSER, OSER_EL_MEDIUM, |
| 184 | "error parsing SE header"); |
| 185 | set_err_reply(400, "bad headers"); |
| 186 | } |
| 187 | return result; |
| 188 | } |
| 189 | if ( se ) { |
| 190 | *se = *((struct session_expires *)msg->session_expires->parsed); |
| 191 | } |
| 192 | return parse_sst_success; |
| 193 | } |
| 194 | else { |
| 195 | return parse_sst_header_not_found; |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | |
| 200 | enum parse_sst_result |
no test coverage detected