diff --git a/channels/chan_sip.c b/channels/chan_sip.c index aaf222d848722f9efcf16aaf148e23db72648c8c..a679f65e9088ac424012ccbd3c640ac0e3b96e5c 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -831,6 +831,7 @@ struct sip_auth { #define SIP_PAGE2_RT_FROMCONTACT (1 << 4) /*!< P: ... */ #define SIP_PAGE2_RTSAVE_SYSNAME (1 << 5) /*!< G: Save system name at registration? */ /* Space for addition of other realtime flags in the future */ + #define SIP_PAGE2_IGNOREREGEXPIRE (1 << 10) /*!< G: Ignore expiration of peer */ #define SIP_PAGE2_DYNAMIC (1 << 13) /*!< P: Dynamic Peers register with Asterisk */ #define SIP_PAGE2_SELFDESTRUCT (1 << 14) /*!< P: Automatic peers need to destruct themselves */ @@ -838,19 +839,22 @@ struct sip_auth { #define SIP_PAGE2_ALLOWSUBSCRIBE (1 << 16) /*!< GP: Allow subscriptions from this peer? */ #define SIP_PAGE2_ALLOWOVERLAP (1 << 17) /*!< DP: Allow overlap dialing ? */ #define SIP_PAGE2_SUBSCRIBEMWIONLY (1 << 18) /*!< GP: Only issue MWI notification if subscribed to */ + #define SIP_PAGE2_T38SUPPORT (7 << 20) /*!< GDP: T38 Fax Passthrough Support */ -#define SIP_PAGE2_T38SUPPORT_UDPTL (1 << 20) /*!< GDP: 20: T38 Fax Passthrough Support */ -#define SIP_PAGE2_T38SUPPORT_RTP (2 << 20) /*!< GDP: 21: T38 Fax Passthrough Support (not implemented) */ -#define SIP_PAGE2_T38SUPPORT_TCP (4 << 20) /*!< GDP: 22: T38 Fax Passthrough Support (not implemented) */ -#define SIP_PAGE2_CALL_ONHOLD (3 << 23) /*!< D: Call hold states */ -#define SIP_PAGE2_CALL_ONHOLD_ACTIVE (1 << 23) /*!< D: 23: Active hold */ -#define SIP_PAGE2_CALL_ONHOLD_ONEDIR (2 << 23) /*!< D: 23: One directional hold */ -#define SIP_PAGE2_CALL_ONHOLD_INACTIVE (3 << 23) /*!< D: 23: Inactive hold */ -#define SIP_PAGE2_RFC2833_COMPENSATE (1 << 25) /*!< DP: 25: Compensate for buggy RFC2833 implementations */ -#define SIP_PAGE2_BUGGY_MWI (1 << 26) /*!< DP: 26: Buggy CISCO MWI fix */ -#define SIP_PAGE2_NOTEXT (1 << 27) /*!< GPD: 27: Text not supported */ -#define SIP_PAGE2_TEXTSUPPORT (1 << 28) /*!< GPD: 28: Global text enable */ -#define SIP_PAGE2_OUTGOING_CALL (1 << 30) /*!< D: 30: Is this an outgoing call? */ +#define SIP_PAGE2_T38SUPPORT_UDPTL (1 << 20) /*!< GDP: T38 Fax Passthrough Support */ +#define SIP_PAGE2_T38SUPPORT_RTP (2 << 20) /*!< GDP: T38 Fax Passthrough Support (not implemented) */ +#define SIP_PAGE2_T38SUPPORT_TCP (4 << 20) /*!< GDP: T38 Fax Passthrough Support (not implemented) */ + +#define SIP_PAGE2_CALL_ONHOLD (3 << 23) /*!< D: Call hold states: */ +#define SIP_PAGE2_CALL_ONHOLD_ACTIVE (1 << 23) /*!< D: Active hold */ +#define SIP_PAGE2_CALL_ONHOLD_ONEDIR (2 << 23) /*!< D: One directional hold */ +#define SIP_PAGE2_CALL_ONHOLD_INACTIVE (3 << 23) /*!< D: Inactive hold */ + +#define SIP_PAGE2_RFC2833_COMPENSATE (1 << 25) /*!< DP: Compensate for buggy RFC2833 implementations */ +#define SIP_PAGE2_BUGGY_MWI (1 << 26) /*!< DP: Buggy CISCO MWI fix */ +#define SIP_PAGE2_NOTEXT (1 << 27) /*!< GDP: Text not supported */ +#define SIP_PAGE2_TEXTSUPPORT (1 << 28) /*!< GDP: Global text enable */ +#define SIP_PAGE2_OUTGOING_CALL (1 << 30) /*!< D: Is this an outgoing call? */ #define SIP_PAGE2_FLAGS_TO_COPY \ (SIP_PAGE2_ALLOWSUBSCRIBE | SIP_PAGE2_ALLOWOVERLAP | SIP_PAGE2_VIDEOSUPPORT | \ @@ -1752,7 +1756,7 @@ static int sip_set_udptl_peer(struct ast_channel *chan, struct ast_udptl *udptl) static const struct ast_channel_tech sip_tech = { .type = "SIP", .description = "Session Initiation Protocol (SIP)", - .capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1), + .capabilities = AST_FORMAT_AUDIO_MASK, /* all audio formats */ .properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER, .requester = sip_request_call, /* called with chan unlocked */ .devicestate = sip_devicestate, /* called with chan unlocked (not chan-specific) */ @@ -1781,7 +1785,7 @@ static const struct ast_channel_tech sip_tech = { static const struct ast_channel_tech sip_tech_info = { .type = "SIP", .description = "Session Initiation Protocol (SIP)", - .capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1), + .capabilities = AST_FORMAT_AUDIO_MASK, /* all audio formats */ .properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER, .requester = sip_request_call, .devicestate = sip_devicestate, @@ -16570,7 +16574,15 @@ static struct ast_channel *sip_request_call(const char *type, int format, void * char *dest = data; oldformat = format; - if (!(format &= ((AST_FORMAT_MAX_AUDIO << 1) - 1))) { + /* mask request with some set of allowed formats. + * XXX this needs to be fixed. + * The original code uses AST_FORMAT_AUDIO_MASK, but it is + * unclear what to use here. We have global_capabilities, which is + * configured from sip.conf, and sip_tech.capabilities, which is + * hardwired to all audio formats. + */ + format &= AST_FORMAT_AUDIO_MASK; + if (!format) { ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format %s while capability is %s\n", ast_getformatname(oldformat), ast_getformatname(global_capability)); *cause = AST_CAUSE_BEARERCAPABILITY_NOTAVAIL; /* Can't find codec to connect to host */ return NULL;