00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00030 #include "priv.h"
00031 #include <freesdp/common.h>
00032
00033 fsdp_description_t*
00034 fsdp_description_new(void)
00035 {
00036 unsigned int i;
00037 fsdp_description_t *result = malloc(sizeof(fsdp_description_t));
00038
00039 result->version = 0;
00040 result->o_username = result->o_session_id =
00041 result->o_announcement_version = NULL;
00042 result->o_network_type = FSDP_NETWORK_TYPE_UNDEFINED;
00043 result->o_address_type = FSDP_ADDRESS_TYPE_UNDEFINED;
00044 result->o_address = NULL;
00045 result->s_name = NULL;
00046 result->i_information = NULL;
00047 result->u_uri = NULL;
00048 result->emails = NULL;
00049 result->emails_count = 0;
00050 result->phones = NULL;
00051 result->phones_count = 0;
00052
00053
00054 result->c_network_type = FSDP_NETWORK_TYPE_UNDEFINED;
00055 result->c_address_type = FSDP_ADDRESS_TYPE_UNDEFINED;
00056 result->c_address.address = NULL;
00057
00058 result->bw_modifiers = NULL;
00059 result->bw_modifiers_count = 0;
00060 result->time_periods = NULL;
00061 result->time_periods_count = 0;
00062 result->timezone_adj = NULL;
00063 result->k_encryption_method = FSDP_ENCRYPTION_METHOD_UNDEFINED;
00064 result->k_encryption_content = NULL;
00065
00066 for ( i = 0; i < (FSDP_LAST_SESSION_STR_ATT + 1); i++ )
00067 result->a_str_attributes[i] = NULL;
00068 result->a_type = FSDP_SESSION_TYPE_UNDEFINED;
00069 result->a_sendrecv_mode = FSDP_SENDRECV_UNDEFINED;
00070 result->a_sdplangs = result->a_langs = NULL;
00071 result->a_rtpmaps = NULL;
00072 result->unidentified_attributes = NULL;
00073 result->unidentified_attributes_count = 0;
00074 result->media_announcements = NULL;
00075 result->media_announcements_count = 0;
00076
00077 return result;
00078 }
00079
00080 void
00081 fsdp_description_delete(fsdp_description_t *dsc)
00082 {
00083 fsdp_description_recycle(dsc);
00084 free(dsc);
00085 }
00086
00087 void fsdp_description_recycle(fsdp_description_t *dsc)
00088 {
00089
00090 unsigned int i, j;
00091
00092 if ( NULL == dsc )
00093 return;
00094
00095 free(dsc->o_username);
00096 free(dsc->o_session_id);
00097 free(dsc->o_announcement_version);
00098 free(dsc->o_address);
00099 free(dsc->s_name);
00100 free(dsc->i_information);
00101 free(dsc->u_uri);
00102
00103 for ( i = 0; i < dsc->emails_count; i++ )
00104 free((char*)dsc->emails[i]);
00105 free(dsc->emails);
00106
00107 for ( i = 0; i < dsc->phones_count; i++ )
00108 free((char*)dsc->phones[i]);
00109 free(dsc->phones);
00110
00111 free(dsc->c_address.address);
00112 for ( i =0; i < dsc->bw_modifiers_count; i++) {
00113 free(dsc->bw_modifiers[i].b_unknown_bw_modt);
00114 }
00115 free(dsc->bw_modifiers);
00116
00117 for ( i = 0; i < dsc->time_periods_count; i++ ) {
00118 for ( j = 0; j < dsc->time_periods[i]->repeats_count; j++ ) {
00119 free(dsc->time_periods[i]->repeats[j]->offsets);
00120 free(dsc->time_periods[i]->repeats[j]);
00121 }
00122 free(dsc->time_periods[i]->repeats);
00123 free(dsc->time_periods[i]);
00124 }
00125 free(dsc->time_periods);
00126
00127
00128 free(dsc->timezone_adj);
00129 for ( i = 0; i < (FSDP_LAST_SESSION_STR_ATT + 1); i++ )
00130 free(dsc->a_str_attributes[i]);
00131 for ( i = 0; i < dsc->a_rtpmaps_count; i++ )
00132 free(dsc->a_rtpmaps[i]);
00133 free(dsc->a_rtpmaps);
00134 for ( i = 0; i < dsc->a_sdplangs_count; i++ )
00135 free(dsc->a_sdplangs[i]);
00136 free(dsc->a_sdplangs);
00137 for ( i = 0; i < dsc->a_langs_count; i++ )
00138 free(dsc->a_langs[i]);
00139 free(dsc->a_langs);
00140
00141 for ( i = 0; i < dsc->media_announcements_count; i++ ) {
00142 for ( j = 0; j < dsc->media_announcements[i]->formats_count; j++ )
00143 free(dsc->media_announcements[i]->formats[j]);
00144 free(dsc->media_announcements[i]->formats);
00145 free(dsc->media_announcements[i]->i_title);
00146
00147 for ( j = 0; j < dsc->media_announcements[i]->bw_modifiers_count; j ++ ) {
00148 if ( FSDP_BW_MOD_TYPE_UNKNOWN ==
00149 dsc->media_announcements[i]->bw_modifiers[j].b_mod_type )
00150 free(dsc->media_announcements[i]->bw_modifiers[j].b_unknown_bw_modt);
00151 }
00152 free(dsc->media_announcements[i]->bw_modifiers);
00153 free(dsc->media_announcements[i]->k_encryption_content);
00154 for ( j = 0; j < dsc->media_announcements[i]->a_rtpmaps_count; j++ ) {
00155 free(dsc->media_announcements[i]->a_rtpmaps[j]->pt);
00156 free(dsc->media_announcements[i]->a_rtpmaps[j]->encoding_name);
00157 free(dsc->media_announcements[i]->a_rtpmaps[j]->parameters);
00158 free(dsc->media_announcements[i]->a_rtpmaps[j]);
00159 }
00160 free(dsc->media_announcements[i]->a_rtpmaps);
00161 for ( j = 0; j < dsc->media_announcements[i]->a_sdplangs_count; j++ ) {
00162 free(dsc->media_announcements[i]->a_sdplangs[j]);
00163 }
00164 free(dsc->media_announcements[i]->a_sdplangs);
00165 for ( j = 0; j < dsc->media_announcements[i]->a_langs_count; j++ ) {
00166 free(dsc->media_announcements[i]->a_langs[j]);
00167 }
00168 free(dsc->media_announcements[i]->a_langs);
00169 for ( j = 0; j < dsc->media_announcements[i]->a_fmtps_count; j++ ) {
00170 free(dsc->media_announcements[i]->a_fmtps[j]);
00171 }
00172 free(dsc->media_announcements[i]->a_fmtps);
00173 for ( j = 0;
00174 j < dsc->media_announcements[i]->unidentified_attributes_count;
00175 j++ ) {
00176 free(dsc->media_announcements[i]->unidentified_attributes[j]);
00177 }
00178 free(dsc->media_announcements[i]->unidentified_attributes);
00179 free(dsc->media_announcements[i]);
00180 }
00181 free(dsc->media_announcements);
00182
00183
00184
00185 dsc->emails_count = 0;
00186 dsc->phones_count = 0;
00187 dsc->bw_modifiers_count = 0;
00188 dsc->time_periods_count = 0;
00189 dsc->media_announcements_count = 0;
00190 }