Re: [PATCH] SDP patch to add support for HDP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jose',

On Fri, Nov 13, 2009 at 10:43 AM, José Antonio Santos Cadenas
<jcaden@xxxxxxxxxxxx> wrote:
> This patch tries to simplify the way the SDP records for HDP are created. The
> created functions allow adding supported features easily to an sdp record. The
> are similar to sdp_set_profile_descs and sdp_get_profile_descs.  I've also added
> some macros to define new UUID's for HDP.
>
>
> diff --git a/lib/sdp.c b/lib/sdp.c
> index 822ec1a..93490e7 100644
> --- a/lib/sdp.c
> +++ b/lib/sdp.c
> @@ -4621,3 +4621,82 @@ uint16_t sdp_gen_tid(sdp_session_t *session)
>  {
>        return session->tid++;
>  }
> +
> +/*
> +* Set the supported features
> +*/
> +void sdp_set_supp_feat(sdp_record_t *rec, const sdp_list_t *sf)
> +{
> +       const sdp_list_t *p, *r;
> +       sdp_data_t *feat = NULL, *seq_feat = NULL;
Avoid declaration and initialization.

> +
> +       int seqlen = sdp_list_len(sf);
> +       void **seqDTDs = (void **)malloc (seqlen *  sizeof(void *));
> +       void **seqVals = (void **)malloc (seqlen *  sizeof(void *));
> +       int i = 0;
> +
> +       for (p = sf; p; p = p->next) {
> +               int plen = sdp_list_len(p->data);
> +               void **dtds = (void **)malloc (plen *  sizeof(void *));
> +               void **vals = (void **)malloc (plen *  sizeof(void *));
> +               int j = 0;
> +               for (r=p->data; r; r = r->next) {
coding style: missing space "r=p->data"

> +                       sdp_data_t *data = (sdp_data_t*)r->data;
> +                       dtds[j] = &data->dtd;
> +                       vals[j] = &data->val;
> +                       j++;
> +               }
> +               feat = sdp_seq_alloc(dtds, vals, plen);
> +               free(dtds);
> +               free(vals);
> +
> +               seqDTDs[i] = &feat->dtd;
> +               seqVals[i] = feat;
> +               i++;
> +       }
> +       seq_feat = sdp_seq_alloc(seqDTDs, seqVals, seqlen);
> +
> +       sdp_attr_replace(rec, SDP_ATTR_SUPPORTED_FEATURES_LIST, seq_feat);
Check if seqDTDs and seqVals need to be freed.

> +}
> +
> +/*
> + * Get the supported features
> + * If an error occurred -1 is returned and errno is set
> + */
> +int sdp_get_supp_feat (const sdp_record_t *rec, sdp_list_t **seqp)
> +{
> +
> +       *seqp = NULL;
> +       sdp_data_t * sdpdata = NULL;
Compiler warning: ISO C90 forbids mixed declarations and code. Remove
extra space and "sdpdata" initialization.

Avoid nested if/else/for:
> +
> +       sdpdata = sdp_data_get(rec, SDP_ATTR_SUPPORTED_FEATURES_LIST);
> +       if (sdpdata && sdpdata->dtd >= SDP_SEQ8 && sdpdata->dtd <= SDP_SEQ32) {
> +               sdp_data_t *d;
> +               for (d = sdpdata->val.dataseq; d; d = d->next) {
> +                       if ( d->dtd >= SDP_SEQ8 && d->dtd <= SDP_SEQ32 ) {
> +                               sdp_data_t *dd;
> +                               sdp_list_t *subseq = NULL;
> +                               for (dd = d->val.dataseq; dd; dd = dd->next) {
> +                                       sdp_data_t *data;
> +                                       if ( dd->dtd != SDP_UINT8 &&
> +                                               dd->dtd != SDP_UINT16 &&
> +                                               dd->dtd != SDP_TEXT_STR8)
> +                                               goto fail;
> +                                       data = sdp_data_alloc(dd->dtd, &dd->val);
> +                                       subseq = sdp_list_append(subseq, data);
> +                               }
> +                               *seqp = sdp_list_append (*seqp, subseq);
> +                       } else
> +                               goto fail;
If you invert the logic you don't need this "goto"

> +               }
> +               return 0;
> +       }
> +
Remove extra line.
Do you have an application or sdptool's patch to test these functions?

Br,
Claudio.

> +       return sdp_get_uuidseq_attr(rec, SDP_ATTR_SUPPORTED_FEATURES_LIST, seqp);
> +
> +fail:
> +       sdp_list_free(*seqp, free);
> +       errno = EINVAL;
> +       return -1;
> +}
> diff --git a/lib/sdp.h b/lib/sdp.h
> index 375261e..1bb351a 100644
> --- a/lib/sdp.h
> +++ b/lib/sdp.h
> @@ -244,13 +244,16 @@ extern "C" {
>  #define SDP_ATTR_GROUP_ID                      0x0200
>  #define SDP_ATTR_IP_SUBNET                     0x0200
>  #define SDP_ATTR_VERSION_NUM_LIST              0x0200
> +#define SDP_ATTR_SUPPORTED_FEATURES_LIST 0x0200
>  #define SDP_ATTR_SVCDB_STATE                   0x0201
>
>  #define SDP_ATTR_SERVICE_VERSION               0x0300
>  #define SDP_ATTR_EXTERNAL_NETWORK              0x0301
>  #define SDP_ATTR_SUPPORTED_DATA_STORES_LIST    0x0301
> +#define SDP_ATTR_DATA_EXCHANGE_SPEC            0x0301
>  #define SDP_ATTR_FAX_CLASS1_SUPPORT            0x0302
>  #define SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL   0x0302
> +#define SDP_ATTR_MCAP_SUPPORTED_PROCEDURES     0x0302
>  #define SDP_ATTR_FAX_CLASS20_SUPPORT           0x0303
>  #define SDP_ATTR_SUPPORTED_FORMATS_LIST                0x0303
>  #define SDP_ATTR_FAX_CLASS2_SUPPORT            0x0304
> diff --git a/lib/sdp_lib.h b/lib/sdp_lib.h
> index ee39df8..41d5786 100644
> --- a/lib/sdp_lib.h
> +++ b/lib/sdp_lib.h
> @@ -585,6 +585,19 @@ static inline int sdp_get_icon_url(const sdp_record_t
> *rec, char *str, int len)
>        return sdp_get_string_attr(rec, SDP_ATTR_ICON_URL, str, len);
>  }
>
> +/*
> + * Set the supported features
> + * sf should be a list of list with each feature data
> + */
> +void sdp_set_supp_feat(sdp_record_t *rec, const sdp_list_t *sf);
> +
> +/*
> + * Get the supported features
> + * seqp is set to a list of list with each feature data
> + * If an error occurred -1 is returned and errno is set
> + */
> +int sdp_get_supp_feat (const sdp_record_t *rec, sdp_list_t **seqp);
> +
>  sdp_record_t *sdp_extract_pdu(const uint8_t *pdata, int bufsize, int
> *scanned);
>  sdp_record_t *sdp_copy_record(sdp_record_t *rec);
>
>
>
��.n��������+%������w��{.n�����{����^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�m


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux