2 The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
3 Copyright (C) 2001,2002,2003 Aymeric MOIZARD jack@atosc.org
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <osipparser2/osip_const.h>
22 #include <osipparser2/osip_port.h>
23 #include <osipparser2/sdp_message.h>
29 sdp_message_v_version_set (sdp_message_t * sdp, char *v_version)
33 sdp->v_version = v_version;
38 sdp_message_v_version_get (sdp_message_t * sdp)
42 return sdp->v_version;
46 sdp_message_o_origin_set (sdp_message_t * sdp, char *username, char *sess_id,
47 char *sess_version, char *nettype, char *addrtype,
52 sdp->o_username = username;
53 sdp->o_sess_id = sess_id;
54 sdp->o_sess_version = sess_version;
55 sdp->o_nettype = nettype;
56 sdp->o_addrtype = addrtype;
62 sdp_message_o_username_get (sdp_message_t * sdp)
66 return sdp->o_username;
70 sdp_message_o_sess_id_get (sdp_message_t * sdp)
74 return sdp->o_sess_id;
78 sdp_message_o_sess_version_get (sdp_message_t * sdp)
82 return sdp->o_sess_version;
86 sdp_message_o_nettype_get (sdp_message_t * sdp)
90 return sdp->o_nettype;
94 sdp_message_o_addrtype_get (sdp_message_t * sdp)
98 return sdp->o_addrtype;
102 sdp_message_o_addr_get (sdp_message_t * sdp)
110 sdp_message_s_name_set (sdp_message_t * sdp, char *name)
119 sdp_message_s_name_get (sdp_message_t * sdp)
127 sdp_message_i_info_set (sdp_message_t * sdp, int pos_media, char *info)
138 med = osip_list_get (sdp->m_medias, pos_media);
146 sdp_message_i_info_get (sdp_message_t * sdp, int pos_media)
156 med = osip_list_get (sdp->m_medias, pos_media);
163 sdp_message_u_uri_set (sdp_message_t * sdp, char *uri)
172 sdp_message_u_uri_get (sdp_message_t * sdp)
180 sdp_message_e_email_add (sdp_message_t * sdp, char *email)
184 osip_list_add (sdp->e_emails, email, -1);
189 sdp_message_e_email_get (sdp_message_t * sdp, int pos)
193 if (osip_list_size (sdp->e_emails) > pos)
194 return (char *) osip_list_get (sdp->e_emails, pos);
199 sdp_message_p_phone_add (sdp_message_t * sdp, char *phone)
203 osip_list_add (sdp->p_phones, phone, -1);
208 sdp_message_p_phone_get (sdp_message_t * sdp, int pos)
212 if (osip_list_size (sdp->p_phones) > pos)
213 return (char *) osip_list_get (sdp->p_phones, pos);
218 sdp_message_c_connection_add (sdp_message_t * sdp, int pos_media,
219 char *nettype, char *addrtype,
220 char *addr, char *addr_multicast_ttl,
221 char *addr_multicast_int)
225 sdp_connection_t *conn;
229 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
231 i = sdp_connection_init (&conn);
234 conn->c_nettype = nettype;
235 conn->c_addrtype = addrtype;
237 conn->c_addr_multicast_ttl = addr_multicast_ttl;
238 conn->c_addr_multicast_int = addr_multicast_int;
241 sdp->c_connection = conn;
244 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
245 osip_list_add (med->c_connections, conn, -1);
249 /* this method should be internal only... */
251 sdp_message_connection_get (sdp_message_t * sdp, int pos_media, int pos)
257 if (pos_media == -1) /* pos is useless in this case: 1 global "c=" is allowed */
258 return sdp->c_connection;
259 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
262 return (sdp_connection_t *) osip_list_get (med->c_connections, pos);
266 sdp_message_c_nettype_get (sdp_message_t * sdp, int pos_media, int pos)
268 sdp_connection_t *conn = sdp_message_connection_get (sdp, pos_media, pos);
272 return conn->c_nettype;
276 sdp_message_c_addrtype_get (sdp_message_t * sdp, int pos_media, int pos)
278 sdp_connection_t *conn = sdp_message_connection_get (sdp, pos_media, pos);
282 return conn->c_addrtype;
286 sdp_message_c_addr_get (sdp_message_t * sdp, int pos_media, int pos)
288 sdp_connection_t *conn = sdp_message_connection_get (sdp, pos_media, pos);
296 sdp_message_c_addr_multicast_ttl_get (sdp_message_t * sdp, int pos_media,
299 sdp_connection_t *conn = sdp_message_connection_get (sdp, pos_media, pos);
303 return conn->c_addr_multicast_ttl;
307 sdp_message_c_addr_multicast_int_get (sdp_message_t * sdp, int pos_media,
310 sdp_connection_t *conn = sdp_message_connection_get (sdp, pos_media, pos);
314 return conn->c_addr_multicast_int;
318 sdp_message_b_bandwidth_add (sdp_message_t * sdp, int pos_media, char *bwtype,
323 sdp_bandwidth_t *band;
327 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
329 i = sdp_bandwidth_init (&band);
332 band->b_bwtype = bwtype;
333 band->b_bandwidth = bandwidth;
336 osip_list_add (sdp->b_bandwidths, band, -1);
339 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
340 osip_list_add (med->b_bandwidths, band, -1);
345 sdp_message_bandwidth_get (sdp_message_t * sdp, int pos_media, int pos)
352 return (sdp_bandwidth_t *) osip_list_get (sdp->b_bandwidths, pos);
353 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
356 return (sdp_bandwidth_t *) osip_list_get (med->b_bandwidths, pos);
360 sdp_message_b_bwtype_get (sdp_message_t * sdp, int pos_media, int pos)
362 sdp_bandwidth_t *band = sdp_message_bandwidth_get (sdp, pos_media, pos);
366 return band->b_bwtype;
370 sdp_message_b_bandwidth_get (sdp_message_t * sdp, int pos_media, int pos)
372 sdp_bandwidth_t *band = sdp_message_bandwidth_get (sdp, pos_media, pos);
376 return band->b_bandwidth;
380 sdp_message_t_time_descr_add (sdp_message_t * sdp, char *start, char *stop)
383 sdp_time_descr_t *td;
387 i = sdp_time_descr_init (&td);
390 td->t_start_time = start;
391 td->t_stop_time = stop;
392 osip_list_add (sdp->t_descrs, td, -1);
397 sdp_message_t_start_time_get (sdp_message_t * sdp, int pos_td)
399 sdp_time_descr_t *td;
403 td = (sdp_time_descr_t *) osip_list_get (sdp->t_descrs, pos_td);
406 return td->t_start_time;
410 sdp_message_t_stop_time_get (sdp_message_t * sdp, int pos_td)
412 sdp_time_descr_t *td;
416 td = (sdp_time_descr_t *) osip_list_get (sdp->t_descrs, pos_td);
419 return td->t_stop_time;
423 sdp_message_r_repeat_add (sdp_message_t * sdp, int pos_time_descr,
426 sdp_time_descr_t *td;
430 td = (sdp_time_descr_t *) osip_list_get (sdp->t_descrs, pos_time_descr);
433 osip_list_add (td->r_repeats, field, -1);
438 sdp_message_r_repeat_get (sdp_message_t * sdp, int pos_time_descr,
441 sdp_time_descr_t *td;
445 td = (sdp_time_descr_t *) osip_list_get (sdp->t_descrs, pos_time_descr);
448 return (char *) osip_list_get (td->r_repeats, pos_repeat);
452 sdp_message_z_adjustments_set (sdp_message_t * sdp, char *field)
456 sdp->z_adjustments = field;
461 sdp_message_z_adjustments_get (sdp_message_t * sdp)
465 return sdp->z_adjustments;
469 sdp_message_k_key_set (sdp_message_t * sdp, int pos_media, char *keytype,
477 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
480 key->k_keytype = keytype;
481 key->k_keydata = keydata;
487 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
493 sdp_message_k_keytype_get (sdp_message_t * sdp, int pos_media)
501 if (sdp->k_key == NULL)
503 return sdp->k_key->k_keytype;
505 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
507 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
508 if (med->k_key == NULL)
510 return med->k_key->k_keytype;
514 sdp_message_k_keydata_get (sdp_message_t * sdp, int pos_media)
522 if (sdp->k_key == NULL)
524 return sdp->k_key->k_keydata;
526 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
528 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
529 if (med->k_key == NULL)
531 return med->k_key->k_keydata;
535 sdp_message_a_attribute_add (sdp_message_t * sdp, int pos_media,
536 char *att_field, char *att_value)
540 sdp_attribute_t *attr;
544 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
546 i = sdp_attribute_init (&attr);
549 attr->a_att_field = att_field;
550 attr->a_att_value = att_value;
553 osip_list_add (sdp->a_attributes, attr, -1);
556 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
557 osip_list_add (med->a_attributes, attr, -1);
562 sdp_message_a_attribute_del (sdp_message_t * sdp, int pos_media, char *att_field)
566 sdp_attribute_t* attr;
570 if ((pos_media != -1) && (osip_list_size (sdp->m_medias) < pos_media + 1))
574 for (i=0;i<osip_list_size(sdp->a_attributes);)
576 attr = osip_list_get(sdp->a_attributes,i);
577 if (strcmp(attr->a_att_field,att_field)==0)
579 osip_list_remove(sdp->a_attributes,i);
580 sdp_attribute_free(attr);
587 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
590 for (i=0;i<osip_list_size(med->a_attributes);)
592 attr = osip_list_get(med->a_attributes,i);
593 if (strcmp(attr->a_att_field,att_field)==0)
595 osip_list_remove(med->a_attributes,i);
596 sdp_attribute_free(attr);
606 sdp_message_attribute_get (sdp_message_t * sdp, int pos_media, int pos)
613 return (sdp_attribute_t *) osip_list_get (sdp->a_attributes, pos);
614 med = (sdp_media_t *) osip_list_get (sdp->m_medias, pos_media);
617 return (sdp_attribute_t *) osip_list_get (med->a_attributes, pos);
621 sdp_message_a_att_field_get (sdp_message_t * sdp, int pos_media, int pos)
623 sdp_attribute_t *attr = sdp_message_attribute_get (sdp, pos_media, pos);
627 return attr->a_att_field;
631 sdp_message_a_att_value_get (sdp_message_t * sdp, int pos_media, int pos)
633 sdp_attribute_t *attr = sdp_message_attribute_get (sdp, pos_media, pos);
637 return attr->a_att_value;
641 sdp_message_endof_media (sdp_message_t * sdp, int i)
647 if (!osip_list_eol (sdp->m_medias, i))
648 return 0; /* not end of list */
649 return -1; /* end of list */
653 sdp_message_m_media_add (sdp_message_t * sdp, char *media,
654 char *port, char *number_of_port, char *proto)
659 i = sdp_media_init (&med);
662 med->m_media = media;
664 med->m_number_of_port = number_of_port;
665 med->m_proto = proto;
666 osip_list_add (sdp->m_medias, med, -1);
671 sdp_message_m_media_get (sdp_message_t * sdp, int pos_media)
673 sdp_media_t *med = osip_list_get (sdp->m_medias, pos_media);
681 sdp_message_m_port_get (sdp_message_t * sdp, int pos_media)
683 sdp_media_t *med = osip_list_get (sdp->m_medias, pos_media);
691 sdp_message_m_number_of_port_get (sdp_message_t * sdp, int pos_media)
693 sdp_media_t *med = osip_list_get (sdp->m_medias, pos_media);
697 return med->m_number_of_port;
701 sdp_message_m_proto_get (sdp_message_t * sdp, int pos_media)
703 sdp_media_t *med = osip_list_get (sdp->m_medias, pos_media);
711 sdp_message_m_payload_add (sdp_message_t * sdp, int pos_media, char *payload)
713 sdp_media_t *med = osip_list_get (sdp->m_medias, pos_media);
717 osip_list_add (med->m_payloads, payload, -1);
722 sdp_message_m_payload_get (sdp_message_t * sdp, int pos_media, int pos)
724 sdp_media_t *med = osip_list_get (sdp->m_medias, pos_media);
728 return (char *) osip_list_get (med->m_payloads, pos);