bool SipccSdp::Load(sdp_t* sdp, SdpErrorHolder& errorHolder) { // Believe it or not, SDP_SESSION_LEVEL is 0xFFFF if (!mAttributeList.Load(sdp, SDP_SESSION_LEVEL, errorHolder)) { return false; } if (!LoadOrigin(sdp, errorHolder)) { return false; } if (!mBandwidths.Load(sdp, SDP_SESSION_LEVEL, errorHolder)) { return false; } for (int i = 0; i < sdp_get_num_media_lines(sdp); ++i) { // note that we pass a "level" here that is one higher // sipcc counts media sections from 1, using 0xFFFF as the "session" UniquePtr<SipccSdpMediaSection> section( new SipccSdpMediaSection(i, &mAttributeList)); if (!section->Load(sdp, i + 1, errorHolder)) { return false; } mMediaSections.values.push_back(section.release()); } return true; }
/* Function: sdp_validate_sdp * Description: Validate an SDP structure. * Parameters: sdp_p The SDP handle of the struct to validate. * Returns: A result value indicating if the validation was successful. * If not, what type of error was encountered. */ sdp_result_e sdp_validate_sdp (sdp_t *sdp_p) { int i; u16 num_media_levels; /* Need to validate c= info is specified at session level or * at all m= levels. */ if (sdp_connection_valid((void *)sdp_p, SDP_SESSION_LEVEL) == FALSE) { num_media_levels = sdp_get_num_media_lines((void *)sdp_p); for (i=1; i <= num_media_levels; i++) { if (sdp_connection_valid((void *)sdp_p, (unsigned short)i) == FALSE) { sdp_parse_error(sdp_p->peerconnection, "%s c= connection line not specified for " "every media level, validation failed.", sdp_p->debug_str); return (SDP_FAILURE); } } } /* Validate required lines were specified */ if ((sdp_owner_valid((void *)sdp_p) == FALSE) && (sdp_p->conf_p->owner_reqd == TRUE)) { sdp_parse_error(sdp_p->peerconnection, "%s o= owner line not specified, validation failed.", sdp_p->debug_str); return (SDP_FAILURE); } if ((sdp_session_name_valid((void *)sdp_p) == FALSE) && (sdp_p->conf_p->session_name_reqd == TRUE)) { sdp_parse_error(sdp_p->peerconnection, "%s s= session name line not specified, validation failed.", sdp_p->debug_str); return (SDP_FAILURE); } if ((sdp_timespec_valid((void *)sdp_p) == FALSE) && (sdp_p->conf_p->timespec_reqd == TRUE)) { sdp_parse_error(sdp_p->peerconnection, "%s t= timespec line not specified, validation failed.", sdp_p->debug_str); return (SDP_FAILURE); } return (SDP_SUCCESS); }