From 4e1d5dc0d96e099f12ea0127434b4f7029e95b2b Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 11 Mar 2008 21:38:05 +0000 Subject: Ticket #479: allow media transport framework to return transport specific info (for example, to know whether SRTP is enabled) git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1860 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/include/pjmedia/config.h | 21 ++++++++++ pjmedia/include/pjmedia/transport.h | 70 ++++++++++++++++++++++++++++++-- pjmedia/include/pjmedia/transport_srtp.h | 24 +++++++++++ 3 files changed, 112 insertions(+), 3 deletions(-) (limited to 'pjmedia/include') diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h index 0640b184..38dd872c 100644 --- a/pjmedia/include/pjmedia/config.h +++ b/pjmedia/include/pjmedia/config.h @@ -524,6 +524,27 @@ #endif +/** + * Transport info (pjmedia_transport_info) contains a socket info and list + * of transport specific info, since transports can be chained together + * (for example, SRTP transport uses UDP transport as the underlying + * transport). This constant specifies maximum number of transport specific + * infos that can be held in a transport info. + */ +#ifndef PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXCNT +# define PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXCNT 4 +#endif + + +/** + * Maximum size in bytes of storage buffer of a transport specific info. + */ +#ifndef PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXSIZE +# define PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXSIZE (12*sizeof(long)) +#endif + + + /** * @} */ diff --git a/pjmedia/include/pjmedia/transport.h b/pjmedia/include/pjmedia/transport.h index 2629cf87..fcf120da 100644 --- a/pjmedia/include/pjmedia/transport.h +++ b/pjmedia/include/pjmedia/transport.h @@ -207,11 +207,17 @@ PJ_BEGIN_DECL #include + /** * Forward declaration for media transport. */ typedef struct pjmedia_transport pjmedia_transport; +/** + * Forward declaration for media transport info. + */ +typedef struct pjmedia_transport_info pjmedia_transport_info; + /** * This enumeration specifies the general behaviour of media processing */ @@ -228,6 +234,7 @@ typedef enum pjmedia_tranport_media_option } pjmedia_tranport_media_option; + /** * This structure describes the operations for the stream transport. */ @@ -239,7 +246,7 @@ struct pjmedia_transport_op * Application should call #pjmedia_transport_get_info() instead */ pj_status_t (*get_info)(pjmedia_transport *tp, - pjmedia_sock_info *info); + pjmedia_transport_info *info); /** * This function is called by the stream when the transport is about @@ -368,7 +375,14 @@ typedef enum pjmedia_transport_type PJMEDIA_TRANSPORT_TYPE_UDP, /** Media transport using ICE */ - PJMEDIA_TRANSPORT_TYPE_ICE + PJMEDIA_TRANSPORT_TYPE_ICE, + + /** + * Media transport SRTP, this transport is actually security adapter to be + * stacked with other transport to enable encryption on the underlying + * transport. + */ + PJMEDIA_TRANSPORT_TYPE_SRTP } pjmedia_transport_type; @@ -390,6 +404,56 @@ struct pjmedia_transport pjmedia_transport_op *op; }; +/** + * This structure describes buffer storage of transport specific info. + * The actual transport specific info contents will be defined by transport + * implementation. Note that some transport implementations do not need to + * provide specific info, since the general socket info is enough. + */ +typedef struct pjmedia_transport_specific_info +{ + /** + * Specify media transport type. + */ + pjmedia_transport_type type; + + /** + * Specify storage buffer size of transport specific info. + */ + int cbsize; + + /** + * Storage buffer of transport specific info. + */ + char buffer[PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXSIZE]; + +} pjmedia_transport_specific_info; + + +/** + * This structure describes transport informations, including general + * socket information and specific information of single transport or + * stacked transports (e.g: SRTP stacked on top of UDP) + */ +struct pjmedia_transport_info +{ + /** + * General socket info. + */ + pjmedia_sock_info sock_info; + + /** + * Specifies number of transport specific info included. + */ + int specific_info_cnt; + + /** + * Buffer storage of transport specific info. + */ + pjmedia_transport_specific_info spc_info[PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXCNT]; + +}; + /** * Get media socket info from the specified transport. The socket info @@ -403,7 +467,7 @@ struct pjmedia_transport * @return PJ_SUCCESS on success. */ PJ_INLINE(pj_status_t) pjmedia_transport_get_info(pjmedia_transport *tp, - pjmedia_sock_info *info) + pjmedia_transport_info *info) { if (tp->op->get_info) return (*tp->op->get_info)(tp, info); diff --git a/pjmedia/include/pjmedia/transport_srtp.h b/pjmedia/include/pjmedia/transport_srtp.h index a04e28b6..d2b6a015 100644 --- a/pjmedia/include/pjmedia/transport_srtp.h +++ b/pjmedia/include/pjmedia/transport_srtp.h @@ -159,6 +159,30 @@ typedef struct pjmedia_srtp_setting } pjmedia_srtp_setting; +/** + * This structure specifies SRTP transport specific info. This will fit + * into \a buffer field of pjmedia_transport_specific_info. + */ +typedef struct pjmedia_srtp_info +{ + /** + * Specify whether the SRTP transport is active for SRTP session. + */ + pj_bool_t active; + + /** + * Specify the policy used by the SRTP session for receive direction. + */ + pjmedia_srtp_crypto rx_policy; + + /** + * Specify the policy used by the SRTP session for transmit direction. + */ + pjmedia_srtp_crypto tx_policy; + +} pjmedia_srtp_info; + + /** * Initialize SRTP setting with its default values. * -- cgit v1.2.3