Register for remote VOIP server with PJSIP in IOS - ios

I want to make app that let user to make calls over ip (VOIP).
I was following this tutorial http://www.xianwenchen.com/blog/2014/06/09/how-to-make-an-ios-voip-app-with-pjsip-part-1/
but now I want to register to global server like ekiga or linphone.org .
now this is my code written in C
#include "Pjsua.h"
#include <pjsua-lib/pjsua.h>
#define THIS_FILE "Pjsua.c"
static pjsua_acc_id acc_id;
const size_t MAX_SIP_ID_LENGTH = 50;
const size_t MAX_SIP_REG_URI_LENGTH = 50;
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata);
static void on_call_state(pjsua_call_id call_id, pjsip_event *e);
static void on_call_media_state(pjsua_call_id call_id);
static void error_exit(const char *title, pj_status_t status);
int startPjsip(char *sipUser, char* sipDomain)
{
pj_status_t status;
// Create pjsua first
status = pjsua_create();
if (status != PJ_SUCCESS) error_exit("Error in pjsua_create()", status);
// Init pjsua
{
// Init the config structure
pjsua_config cfg;
pjsua_config_default (&cfg);
cfg.cb.on_incoming_call = &on_incoming_call;
cfg.cb.on_call_media_state = &on_call_media_state;
cfg.cb.on_call_state = &on_call_state;
// Init the logging config structure
pjsua_logging_config log_cfg;
pjsua_logging_config_default(&log_cfg);
log_cfg.console_level = 5;
log_cfg.level = 5;
// Init the pjsua
status = pjsua_init(&cfg, &log_cfg, NULL);
if (status != PJ_SUCCESS) error_exit("Error in pjsua_init()", status);
}
// Add UDP transport.
{
// Init transport config structure
pjsua_transport_config cfg;
pjsua_transport_config_default(&cfg);
cfg.port = 5080;
// Add TCP transport.
status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, NULL);
if (status != PJ_SUCCESS) error_exit("Error creating transport udp", status);
}
// Add TCP transport.
{
// Init transport config structure
pjsua_transport_config cfg;
pjsua_transport_config_default(&cfg);
cfg.port = 5080;
// Add TCP transport.
status = pjsua_transport_create(PJSIP_TRANSPORT_TCP, &cfg, NULL);
if (status != PJ_SUCCESS) error_exit("Error creating transport tcp", status);
}
// Initialization is done, now start pjsua
status = pjsua_start();
if (status != PJ_SUCCESS) error_exit("Error starting pjsua", status);
// Register the account on local sip server
{
pjsua_acc_config cfg;
pjsua_acc_config_default(&cfg);
cfg.id = pj_str((char *)"sip:exampleuser#sip.linphone.org");
cfg.reg_uri = pj_str((char *)"sip:sip.linphone.org");
cfg.proxy[0] = pj_str((char *)"sip:sip.linphone.org");
cfg.cred_count = 1;
cfg.cred_info[0].scheme = pj_str((char *)"digest");
cfg.cred_info[0].realm = pj_str((char *)"*");
cfg.cred_info[0].username = pj_str((char *)"exampleuser");
cfg.cred_info[0].data_type = 0;
cfg.cred_info[0].data = pj_str((char *)"examplepasswor");
status = pjsua_acc_add(&cfg, PJ_TRUE, &acc_id);
if (status != PJ_SUCCESS) error_exit("Error adding account", status);
}
return 0;
}
/* Callback called by the library upon receiving incoming call */
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
pjsip_rx_data *rdata)
{
pjsua_call_info ci;
PJ_UNUSED_ARG(acc_id);
PJ_UNUSED_ARG(rdata);
pjsua_call_get_info(call_id, &ci);
PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
(int)ci.remote_info.slen,
ci.remote_info.ptr));
/* Automatically answer incoming calls with 200/OK */
pjsua_call_answer(call_id, 200, NULL, NULL);
}
/* Callback called by the library when call's state has changed */
static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
{
pjsua_call_info ci;
PJ_UNUSED_ARG(e);
pjsua_call_get_info(call_id, &ci);
PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,
(int)ci.state_text.slen,
ci.state_text.ptr));
}
/* Callback called by the library when call's media state has changed */
static void on_call_media_state(pjsua_call_id call_id)
{
pjsua_call_info ci;
pjsua_call_get_info(call_id, &ci);
if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
// When media is active, connect call to sound device.
pjsua_conf_connect(ci.conf_slot, 0);
pjsua_conf_connect(0, ci.conf_slot);
}
}
/* Display error and exit application */
static void error_exit(const char *title, pj_status_t status)
{
pjsua_perror(THIS_FILE, title, status);
pjsua_destroy();
exit(1);
}
void makeCall(char* destUri)
{
pj_status_t status;
pj_str_t uri = pj_str(destUri);
status = pjsua_call_make_call(acc_id, &uri, 0, NULL, NULL, NULL);
if (status != PJ_SUCCESS) error_exit("Error making call", status);
}
void endCall()
{
pjsua_call_hangup_all();
}
display request time out error .
12:41:02.521 os_core_unix.c !pjlib 2.3 for POSIX initialized
12:41:02.524 sip_endpoint.c .Creating endpoint instance...
12:41:02.528 pjlib .select() I/O Queue created (0x7db49148)
12:41:02.528 sip_endpoint.c .Module "mod-msg-print" registered
12:41:02.528 sip_transport. .Transport manager created.
12:41:02.528 pjsua_core.c .PJSUA state changed: NULL --> CREATED
12:41:02.531 sip_endpoint.c .Module "mod-pjsua-log" registered
12:41:02.531 sip_endpoint.c .Module "mod-tsx-layer" registered
12:41:02.532 sip_endpoint.c .Module "mod-stateful-util" registered
12:41:02.532 sip_endpoint.c .Module "mod-ua" registered
12:41:02.533 sip_endpoint.c .Module "mod-100rel" registered
12:41:02.533 sip_endpoint.c .Module "mod-pjsua" registered
12:41:02.533 sip_endpoint.c .Module "mod-invite" registered
12:41:02.584 coreaudio_dev. .. dev_id 0: iPhone IO device (in=1, out=1) 8000Hz
12:41:02.584 coreaudio_dev. ..core audio initialized
12:41:02.584 pjlib ..select() I/O Queue created (0x7cb38a14)
12:41:02.595 sip_endpoint.c .Module "mod-evsub" registered
12:41:02.595 sip_endpoint.c .Module "mod-presence" registered
12:41:02.595 sip_endpoint.c .Module "mod-mwi" registered
12:41:02.609 sip_endpoint.c .Module "mod-refer" registered
12:41:02.609 sip_endpoint.c .Module "mod-pjsua-pres" registered
12:41:02.609 sip_endpoint.c .Module "mod-pjsua-im" registered
12:41:02.609 sip_endpoint.c .Module "mod-pjsua-options" registered
12:41:02.609 pjsua_core.c .1 SIP worker threads created
12:41:02.609 pjsua_core.c .pjsua version 2.3 for Darwin-15.2/x86_64 initialized
12:41:02.609 pjsua_core.c .PJSUA state changed: CREATED --> INIT
12:41:02.610 pjsua_core.c SIP UDP socket reachable at 192.168.1.4:5080
12:41:02.610 udp0x7e33de00 SIP UDP transport started, published address is 192.168.1.4:5080
12:41:02.610 pjsua_core.c PJSUA state changed: INIT --> STARTING
12:41:02.610 sip_endpoint.c .Module "mod-unsolicited-mwi" registered
12:41:02.610 pjsua_core.c .PJSUA state changed: STARTING --> RUNNING
12:41:02.610 pjsua_acc.c Adding account: id=sip:eslamhanafy#sip.linphone.org
12:41:02.610 pjsua_acc.c .Account sip:eslamhanafy#sip.linphone.org added with id 0
12:41:02.662 pjsua_acc.c .Acc 0: setting registration..
12:41:03.011 pjsua_core.c ...TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:03.012 pjsua_acc.c ..Acc 0: Registration sent
12:41:03.012 pjsua_call.c Making call with acc #0 to sip:485501406065403210#sip.linphone.org
12:41:03.013 pjsua_aud.c .Set sound device: capture=-1, playback=-2
12:41:03.014 pjsua_aud.c ..Opening sound device PCM#16000/1/20ms
12:41:03.014 coreaudio_dev. ...Using VoiceProcessingIO audio unit
12:41:03.082 coreaudio_dev. ...core audio stream started
12:41:03.082 pjsua_media.c .Call 0: initializing media..
12:41:03.083 pjsua_media.c ..RTP socket reachable at 192.168.1.4:4000
12:41:03.083 pjsua_media.c ..RTCP socket reachable at 192.168.1.4:4001
12:41:03.083 pjsua_media.c ..Media index 0 selected for audio call 0
12:41:03.084 pjsua_core.c ....TX 1079 bytes Request msg INVITE/cseq=5147 (tdta0x7db57000) to UDP 91.121.209.194:5060:
INVITE sip:485501406065403210#sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwaxGhboJCF8WhuS7G6UQqXVwps0Qo3na
Max-Forwards: 70
From: sip:eslamhanafy#sip.linphone.org;tag=yRJayafQCC9ApjtJuF8-NtAmY8PquMXt
To: sip:485501406065403210#sip.linphone.org
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Call-ID: FScQI.ot3zfH6qdPis4.zQUw4g.yzDun
CSeq: 5147 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length: 446
v=0
o=- 3662793663 3662793663 IN IP4 192.168.1.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 96
c=IN IP4 192.168.1.4
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.4
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
--end msg--
done
done
12:41:03.100 os_core_unix.c !Info: possibly re-registering existing thread
12:41:03.512 pjsua_core.c !.TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:03.585 pjsua_core.c .TX 1079 bytes Request msg INVITE/cseq=5147 (tdta0x7db57000) to UDP 91.121.209.194:5060:
INVITE sip:485501406065403210#sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwaxGhboJCF8WhuS7G6UQqXVwps0Qo3na
Max-Forwards: 70
From: sip:eslamhanafy#sip.linphone.org;tag=yRJayafQCC9ApjtJuF8-NtAmY8PquMXt
To: sip:485501406065403210#sip.linphone.org
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Call-ID: FScQI.ot3zfH6qdPis4.zQUw4g.yzDun
CSeq: 5147 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length: 446
v=0
o=- 3662793663 3662793663 IN IP4 192.168.1.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 96
c=IN IP4 192.168.1.4
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.4
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
--end msg--
12:41:04.513 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:04.585 pjsua_core.c .TX 1079 bytes Request msg INVITE/cseq=5147 (tdta0x7db57000) to UDP 91.121.209.194:5060:
INVITE sip:485501406065403210#sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwaxGhboJCF8WhuS7G6UQqXVwps0Qo3na
Max-Forwards: 70
From: sip:eslamhanafy#sip.linphone.org;tag=yRJayafQCC9ApjtJuF8-NtAmY8PquMXt
To: sip:485501406065403210#sip.linphone.org
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Call-ID: FScQI.ot3zfH6qdPis4.zQUw4g.yzDun
CSeq: 5147 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length: 446
v=0
o=- 3662793663 3662793663 IN IP4 192.168.1.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 96
c=IN IP4 192.168.1.4
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.4
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
--end msg--
12:41:06.515 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:10.515 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:10.585 pjsua_core.c .TX 1079 bytes Request msg INVITE/cseq=5147 (tdta0x7db57000) to UDP 91.121.209.194:5060:
INVITE sip:485501406065403210#sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwaxGhboJCF8WhuS7G6UQqXVwps0Qo3na
Max-Forwards: 70
From: sip:eslamhanafy#sip.linphone.org;tag=yRJayafQCC9ApjtJuF8-NtAmY8PquMXt
To: sip:485501406065403210#sip.linphone.org
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Call-ID: FScQI.ot3zfH6qdPis4.zQUw4g.yzDun
CSeq: 5147 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length: 446
v=0
o=- 3662793663 3662793663 IN IP4 192.168.1.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 96
c=IN IP4 192.168.1.4
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.4
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
--end msg--
12:41:14.515 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:18.518 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:18.588 pjsua_core.c .TX 1079 bytes Request msg INVITE/cseq=5147 (tdta0x7db57000) to UDP 91.121.209.194:5060:
INVITE sip:485501406065403210#sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwaxGhboJCF8WhuS7G6UQqXVwps0Qo3na
Max-Forwards: 70
From: sip:eslamhanafy#sip.linphone.org;tag=yRJayafQCC9ApjtJuF8-NtAmY8PquMXt
To: sip:485501406065403210#sip.linphone.org
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Call-ID: FScQI.ot3zfH6qdPis4.zQUw4g.yzDun
CSeq: 5147 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length: 446
v=0
o=- 3662793663 3662793663 IN IP4 192.168.1.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 96
c=IN IP4 192.168.1.4
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.4
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
--end msg--
12:41:22.520 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:26.520 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:30.524 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:34.525 pjsua_core.c .TX 513 bytes Request msg REGISTER/cseq=61350 (tdta0x7db55800) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjEqa4bpBzv-vnExngLtmsuk5iwICWQ6nq
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=6tsmpbE3RQMQYGV3V4umeMM.U78z5CLt
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: OMZHw0Zs5Yz7Yjn8qZGr3Oiy2ELIHUh2
CSeq: 61350 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
--end msg--
12:41:34.588 pjsua_core.c .TX 1079 bytes Request msg INVITE/cseq=5147 (tdta0x7db57000) to UDP 91.121.209.194:5060:
INVITE sip:485501406065403210#sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwaxGhboJCF8WhuS7G6UQqXVwps0Qo3na
Max-Forwards: 70
From: sip:eslamhanafy#sip.linphone.org;tag=yRJayafQCC9ApjtJuF8-NtAmY8PquMXt
To: sip:485501406065403210#sip.linphone.org
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Call-ID: FScQI.ot3zfH6qdPis4.zQUw4g.yzDun
CSeq: 5147 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length: 446
v=0
o=- 3662793663 3662793663 IN IP4 192.168.1.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 96
c=IN IP4 192.168.1.4
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.4
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
--end msg--
12:41:35.015 pjsua_acc.c ...SIP registration failed, status=408 (Request Timeout)
12:41:35.015 pjsua_acc.c ...Scheduling re-registration retry for acc 0 in 6 seconds..
12:41:35.086 pjsua_media.c ....Call 0: deinitializing media..
12:41:36.087 pjsua_aud.c Closing sound device after idle for 1 second(s)
12:41:36.088 pjsua_aud.c .Closing iPhone IO device sound playback device and iPhone IO device sound capture device
12:41:36.097 coreaudio_dev. .core audio stream stopped
12:41:41.818 pjsua_acc.c Acc 0: setting registration..
12:41:41.820 pjsua_core.c ..TX 513 bytes Request msg REGISTER/cseq=57441 (tdta0x7e343400) to UDP 91.121.209.194:5060:
REGISTER sip:sip.linphone.org SIP/2.0
Via: SIP/2.0/UDP 192.168.1.4:5080;rport;branch=z9hG4bKPjwqokNHR5QxIsPICaadyURijMJCPYMq0s
Max-Forwards: 70
From: <sip:eslamhanafy#sip.linphone.org>;tag=j5fAFvbb3pMEy4jUSE8Mvx4OdSl0LR.I
To: <sip:eslamhanafy#sip.linphone.org>
Call-ID: J4IpT-HlM8wWISM6NHokczyuNpJBZ5i.
CSeq: 57441 REGISTER
Contact: <sip:eslamhanafy#192.168.1.4:5080;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0
please any help.

Checking your log I find that you already have an process running on your phone that is already bind at the target UDP port.
15:47:04.750 Pjsua.c : Error creating transport UDP: Address already in use [status=120048]
This line shows that your App cannot allocate the network resource.
Solution 1: Try to reboot your iOS and/or kill all apps related with SIP;
Solution 2: If possible change the UDP port cfg.port = 5080;

Related

Twilio raises onCancelledCallInvite when answering the call in Android

I have a twilio E2E implemented on Android.
In incoming call, when I answer the call, automatically the "CancelCallInvite" is raised.
Oddly, AcceptCallInvite is also being raised.
It results in inconsistent behavior.
Any reason why the "CancellCallInvite" is being raised.
Follow are the detailed logs
`
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): <0xb400006e3a27cc90> RtcMonitor
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getFrom
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): listen
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getFrom
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getTo
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getCallSid
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getFrom
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getTo
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getCallSid
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): ListenerImpl
2022-12-11 20:53:19.058 31878-3800/com.testD/Twilio: [Core](468292013232): Started listen no-op timer for 600000 ms
2022-12-11 20:53:19.058 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): twilio::voice::AsyncDnsResolver::AsyncDnsResolver(std::weak_ptr<DnsResolverObserver>)
2022-12-11 20:53:19.058 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): AsyncDnsResolver resolving hostname = chunderm.gll.twilio.com
2022-12-11 20:53:19.096 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): AsyncDnsResolver Resolved ip_addr = 54.85.119.44, error = 0
2022-12-11 20:53:19.096 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): virtual void twilio::voice::SipClient::onResolveResult(twilio::voice::AsyncDnsResolver *, std::string, int)
2022-12-11 20:53:19.096 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): onResolveResult for listen, hostname = sip:chunderm.gll.twilio.com:443;transport=tls, ip_addr = 54.85.119.44
2022-12-11 20:53:19.096 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): New SipCall ..., this=0xb400006eba4337c0, handle = 1
2022-12-11 20:53:19.096 31878-4434/com.testI/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Setting outbound proxy to: sip:54.85.119.44:443;transport=tls
2022-12-11 20:53:19.098 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): AsyncDnsResolver Resolved ip_addr = 54.85.119.44, error = 0
2022-12-11 20:53:19.098 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): virtual void twilio::voice::SipClient::onResolveResult(twilio::voice::AsyncDnsResolver *, std::string, int)
2022-12-11 20:53:19.098 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): onResolveResult for listen, hostname = sip:chunderm.gll.twilio.com:443;transport=tls, ip_addr = 54.85.119.44
2022-12-11 20:53:19.098 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): New SipCall ..., this=0xb400006eba431e00, handle = 1
2022-12-11 20:53:19.098 31878-4434/com.testI/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Setting outbound proxy to: sip:54.85.119.44:443;transport=tls
2022-12-11 20:53:19.111 31878-3800/com.testD/TwilioPhone: Call invite received
2022-12-11 20:53:19.468 31878-4451/com.testD/Twilio: [Core](467897662640): mapToSipCall handle id is 1
2022-12-11 20:53:19.468 31878-4451/com.testD/Twilio: [Core](467897662640): casting handle id 1 to SipCall
2022-12-11 20:53:19.469 31878-4451/com.testD/Twilio: [Core](467897662640): onNewSession:
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 192.168.1.x;received=68.173.232.203;branch=z9hG4bK-524287-1---bc41af82e73d6452;rport=49438
Record-Route: <sip:172.25.7.x:10193;r2=on;transport=udp;ftag=f8d41af1;lr>
Record-Route: <sip:54.85.119.44:443;r2=on;transport=tls;ftag=f8d41af1;lr>
Contact: <sip:172.25.0.x:10193>
To: <sip:chunderm.gll.twilio.com:443;transport=tls>;tag=56581121_c3356d0b_5ffcb926-f5ea-4bd6-822a-5974252ed51d
From: <sip:VoiceSDK#chunderm.gll.twilio.com>;tag=f8d41af1
Call-ID: ZFfQioWu6JjChxSZFTJHjQ..
CSeq: 1 INVITE
Server: Twilio
X-Twilio-CallSid: CA00b436b4fdaad9c38063c20aa3e393bc
X-Twilio-EdgeHost: chunderm1.us1.twilio.com
X-Twilio-EdgeRegion: us1
X-Twilio-Zone: US_EAST_VIRGINIA
Content-Length: 0
2022-12-11 20:53:19.469 31878-4451/com.testD/Twilio: [Core](467897662640): onNewCall
2022-12-11 20:53:19.469 31878-4451/com.testD/Twilio: [Core](467897662640): mapToSipCall handle id is 1
2022-12-11 20:53:19.469 31878-4451/com.testD/Twilio: [Core](467897662640): casting handle id 1 to SipCall
2022-12-11 20:53:19.470 31878-4451/com.testD/Twilio: [Core](467897662640): onProvisional:
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 192.168.1.x;received=68.173.232.203;branch=z9hG4bK-524287-1---bc41af82e73d6452;rport=49438
Record-Route: <sip:172.25.7.x:10193;r2=on;transport=udp;ftag=f8d41af1;lr>
Record-Route: <sip:54.85.119.44:443;r2=on;transport=tls;ftag=f8d41af1;lr>
Contact: <sip:172.25.0.x:10193>
To: <sip:chunderm.gll.twilio.com:443;transport=tls>;tag=56581121_c3356d0b_5ffcb926-f5ea-4bd6-822a-5974252ed51d
From: <sip:VoiceSDK#chunderm.gll.twilio.com>;tag=f8d41af1
Call-ID: ZFfQioWu6JjChxSZFTJHjQ..
CSeq: 1 INVITE
Server: Twilio
X-Twilio-CallSid: CA00b436b4fdaad9c38063c20aa3e393bc
X-Twilio-EdgeHost: chunderm1.us1.twilio.com
X-Twilio-EdgeRegion: us1
X-Twilio-Zone: US_EAST_VIRGINIA
Content-Length: 0
2022-12-11 20:53:19.470 31878-4451/com.testD/Twilio: [Core](467897662640): onRinging
2022-12-11 20:53:19.475 31878-4471/com.testD/Twilio: [Core](467830553776): mapToSipCall handle id is 1
2022-12-11 20:53:19.475 31878-4471/com.testD/Twilio: [Core](467830553776): casting handle id 1 to SipCall
2022-12-11 20:53:19.476 31878-4471/com.testD/Twilio: [Core](467830553776): onNewSession:
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 192.168.1.x;received=68.173.232.203;branch=z9hG4bK-524287-1---2ec2a58009fb4c70;rport=49440
Record-Route: <sip:172.25.7.x:10193;r2=on;transport=udp;ftag=12c44225;lr>
Record-Route: <sip:54.85.119.44:443;r2=on;transport=tls;ftag=12c44225;lr>
Contact: <sip:172.25.73.x:10193>
To: <sip:chunderm.gll.twilio.com:443;transport=tls>;tag=56818825_c3356d0b_a7c1c6cb-4c5e-4f6d-b883-14a1e3ba4cfc
From: <sip:VoiceSDK#chunderm.gll.twilio.com>;tag=12c44225
Call-ID: wh4hhqMs9e5U2hQE_qDbOg..
CSeq: 1 INVITE
Server: Twilio
X-Twilio-CallSid: CA00b436b4fdaad9c38063c20aa3e393bc
X-Twilio-EdgeHost: chunderm1.us1.twilio.com
X-Twilio-EdgeRegion: us1
X-Twilio-Zone: US_EAST_VIRGINIA
Content-Length: 0
2022-12-11 20:53:19.476 31878-4471/com.testD/Twilio: [Core](467830553776): onNewCall
2022-12-11 20:53:19.476 31878-4471/com.testD/Twilio: [Core](467830553776): mapToSipCall handle id is 1
2022-12-11 20:53:19.476 31878-4471/com.testD/Twilio: [Core](467830553776): casting handle id 1 to SipCall
2022-12-11 20:53:19.476 31878-4471/com.testD/Twilio: [Core](467830553776): onProvisional:
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 192.168.1.x;received=68.173.232.203;branch=z9hG4bK-524287-1---2ec2a58009fb4c70;rport=49440
Record-Route: <sip:172.25.7.x:10193;r2=on;transport=udp;ftag=12c44225;lr>
Record-Route: <sip:54.85.119.44:443;r2=on;transport=tls;ftag=12c44225;lr>
Contact: <sip:172.25.73.x:10193>
To: <sip:chunderm.gll.twilio.com:443;transport=tls>;tag=56818825_c3356d0b_a7c1c6cb-4c5e-4f6d-b883-14a1e3ba4cfc
From: <sip:VoiceSDK#chunderm.gll.twilio.com>;tag=12c44225
Call-ID: wh4hhqMs9e5U2hQE_qDbOg..
CSeq: 1 INVITE
Server: Twilio
X-Twilio-CallSid: CA00b436b4fdaad9c38063c20aa3e393bc
X-Twilio-EdgeHost: chunderm1.us1.twilio.com
X-Twilio-EdgeRegion: us1
X-Twilio-Zone: US_EAST_VIRGINIA
Content-Length: 0
2022-12-11 20:53:19.476 31878-4471/com.testD/Twilio: [Core](467830553776): onRinging
2022-12-11 20:53:23.219 31878-3800/com.testI/TwilioPhone: Accepting call invite
2022-12-11 20:53:23.220 31878-3800/com.testD/Twilio: [Core](468292013232): API Call createAudioSource
2022-12-11 20:53:23.220 31878-3800/com.testD/Twilio: [Core](468292013232): API Call createAudioTrack
2022-12-11 20:53:23.220 31878-3800/com.testI/Twilio: [Core](468292013232): Adding audio track ...
2022-12-11 20:53:23.221 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getName
2022-12-11 20:53:23.221 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getTrackId
2022-12-11 20:53:23.221 31878-3800/com.testD/Twilio: [Core](468292013232): API Call isEnabled
2022-12-11 20:53:23.226 31878-3800/com.testD/Twilio: [Core](468292013232): API Call accept
2022-12-11 20:53:23.226 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getNetworkingThread
2022-12-11 20:53:23.226 31878-3800/com.testD/Twilio: [Core](468292013232): NetworkManager
2022-12-11 20:53:23.226 31878-3800/com.testD/Twilio: [Core](468292013232): accept
2022-12-11 20:53:23.226 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): SipClient::disconnect
2022-12-11 20:53:23.226 31878-4471/com.testD/Twilio: [Core](467830553776): virtual void twilio::voice::SipCall::DisconnectCommand::executeCommand()
2022-12-11 20:53:23.227 31878-3800/com.testD/Twilio: [Core](468292013232): API Call RTCIceServers
2022-12-11 20:53:23.227 31878-3800/com.testD/Twilio: [Core](468292013232): API Call RTCIceServer
2022-12-11 20:53:23.227 31878-3800/com.testI/Twilio: [Core](468292013232): Creating peer connection ...
2022-12-11 20:53:23.234 31878-3800/com.testD/Twilio: [Core](468292013232): API Call getWebRtcTrack
2022-12-11 20:53:23.238 31878-3800/com.testI/Twilio: [Core](468292013232): Added a Track, created a sender with Id: e2c0bfF503f9Fb72E11CDAf55A94b2d9
2022-12-11 20:53:23.238 31878-3800/com.testD/Twilio: [Core](468292013232): Create initial local offer
2022-12-11 20:53:23.240 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): onCreateSessionLocalDescription
2022-12-11 20:53:23.242 31878-3800/com.testD/Twilio: [Core](468292013232): ~CallInviteImpl
2022-12-11 20:53:23.242 31878-3800/com.testD/Twilio: [Core](468292013232): ~CallerInfoImpl
2022-12-11 20:53:23.249 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): <0xb400006eaa6a99a0> OnSignalingChange
2022-12-11 20:53:23.249 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Signaling state: have-local-offer
2022-12-11 20:53:23.263 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): onSetSessionLocalDescription
2022-12-11 20:53:23.271 31878-4443/com.testD/Twilio: [Core](MediaFactoryImpl::networking 0x0xb400006e1a331ce0): GetNetworks
2022-12-11 20:53:23.274 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Local SDP - v=0
o=- 7871616082435632596 2 IN IP4 127.0.0.x
s=-
t=0 0
a=group:BUNDLE 0
a=msid-semantic: WMS 3A9387E53DEb895b6eBEFe67B8f910EF
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:/MWB
a=ice-pwd:GzQPXzcc2KcYUxLGp3yHB2Q+
a=ice-options:trickle
a=fingerprint:sha-256 A1:87:75:69:B8:A7:A4:3C:49:84:2A:5C:34:96:6D:70:92:45:1D:07:8E:BD:6A:10:83:B0:85:96:BB:06:95:D4
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:3A9387E53DEb895b6eBEFe67B8f910EF e2c0bfF503f9Fb72E11CDAf55A94b2d9
a=rtcp-m
2022-12-11 20:53:23.275 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): twilio::voice::AsyncDnsResolver::AsyncDnsResolver(std::weak_ptr<DnsResolverObserver>)
2022-12-11 20:53:23.275 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): AsyncDnsResolver resolving hostname = chunderm.gll.twilio.com
2022-12-11 20:53:23.277 31878-4443/com.testD/Twilio: [Core](MediaFactoryImpl::networking 0x0xb400006e1a331ce0): GetNetworks
2022-12-11 20:53:23.279 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Gathered ICE candidate: candidate:3163030317 1 udp 2122262783 2603:7000:8d00:d61e:4c09:e2ff:fe05:2085 37727 typ host generation 0 ufrag /MWB network-id 7 network-cost 10, id: WXrRYt+e
2022-12-11 20:53:23.280 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Gathered ICE candidate: candidate:619629460 1 udp 2122194687 192.168.1.x 44619 typ host generation 0 ufrag /MWB network-id 6 network-cost 10, id: J1RFU1DC
2022-12-11 20:53:23.281 31878-4471/com.testD/Twilio: [Core](467830553776): mapToSipCall handle id is 1
2022-12-11 20:53:23.281 31878-4471/com.testD/Twilio: [Core](467830553776): casting handle id 1 to SipCall
2022-12-11 20:53:23.281 31878-4471/com.testD/Twilio: [Core](467830553776): onTerminated: reason 5, this=0xb400006eba431e00
2022-12-11 20:53:23.281 31878-4471/com.testD/Twilio: [Core](467830553776): onTerminated
2022-12-11 20:53:23.281 31878-4471/com.testD/Twilio: [Core](467830553776): ~SipCall(): 0xb400006eba431e00
2022-12-11 20:53:23.282 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Gathered ICE candidate: candidate:962153057 1 udp 2122131711 2607:fc20:fe24:c726:2c8f:9a5d:ae58:7a4a 37614 typ host generation 0 ufrag /MWB network-id 3 network-cost 900, id: Sdwf0pTn
2022-12-11 20:53:23.283 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): raiseCancelCallInvite
2022-12-11 20:53:23.284 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Gathered ICE candidate: candidate:3193558674 1 udp 2122066175 2607:fb90:fea0:14db:4c6e:9451:fa89:304e 48469 typ host generation 0 ufrag /MWB network-id 4 network-cost 900, id: wNUkdUbJ
2022-12-11 20:53:23.285 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Gathered ICE candidate: candidate:2833031007 1 udp 2121998079 192.0.0.4 46706 typ host generation 0 ufrag /MWB network-id 5 network-cost 900, id: UeqXkB4I
2022-12-11 20:53:23.297 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): AsyncDnsResolver Resolved ip_addr = 54.85.119.44, error = 0
2022-12-11 20:53:23.297 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): virtual void twilio::voice::SipClient::onResolveResult(twilio::voice::AsyncDnsResolver *, std::string, int)
2022-12-11 20:53:23.297 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): onResolveResult for connect, hostname = sip:chunderm.gll.twilio.com:443;transport=tls, ip_addr = 54.85.119.44
2022-12-11 20:53:23.297 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): New SipCall ..., this=0xb400006eba4a6f50, handle = 4
2022-12-11 20:53:23.297 31878-4434/com.testI/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Setting outbound proxy to: sip:54.85.119.44:443;transport=tls
2022-12-11 20:53:23.350 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): Gathered ICE candidate: candidate:2779172128 1 udp 1685987071 68.173.232.203 44619 typ srflx raddr 192.168.1.x rport 44619 generation 0 ufrag /MWB network-id 6 network-cost 10, id: cMKTV+Cu
2022-12-11 20:53:23.405 31878-4451/com.testD/Twilio: [Core](467897662640): mapToSipCall handle id is 1
2022-12-11 20:53:23.405 31878-4451/com.testD/Twilio: [Core](467897662640): casting handle id 1 to SipCall
2022-12-11 20:53:23.405 31878-4451/com.testD/Twilio: [Core](467897662640): virtual void twilio::voice::SipCall::onFailure(resip::ClientInviteSessionHandle, const resip::SipMessage &)
2022-12-11 20:53:23.406 31878-4451/com.testD/Twilio: [Core](467897662640): Received incoming SIP message from infra:
SIP/2.0 410 Gone
Via: SIP/2.0/TLS 192.168.1.x;received=68.173.232.203;branch=z9hG4bK-524287-1---bc41af82e73d6452;rport=49438
Contact: <sip:172.25.0.x:10193>
To: <sip:chunderm.gll.twilio.com:443;transport=tls>;tag=56581121_c3356d0b_5ffcb926-f5ea-4bd6-822a-5974252ed51d
From: <sip:VoiceSDK#chunderm.gll.twilio.com>;tag=f8d41af1
Call-ID: ZFfQioWu6JjChxSZFTJHjQ..
CSeq: 1 INVITE
Server: Twilio
X-Twilio-CallSid: CA00b436b4fdaad9c38063c20aa3e393bc
X-Twilio-EdgeHost: chunderm1.us1.twilio.com
X-Twilio-EdgeRegion: us1
X-Twilio-Zone: US_EAST_VIRGINIA
Content-Length: 0
2022-12-11 20:53:23.406 31878-4451/com.testD/Twilio: [Core](467897662640): onFailure
2022-12-11 20:53:23.406 31878-4451/com.testD/Twilio: [Core](467897662640): mapToSipCall handle id is 1
2022-12-11 20:53:23.406 31878-4451/com.testD/Twilio: [Core](467897662640): casting handle id 1 to SipCall
2022-12-11 20:53:23.406 31878-4451/com.testD/Twilio: [Core](467897662640): onTerminated: reason 0, this=0xb400006eba4337c0
2022-12-11 20:53:23.407 31878-4451/com.testD/Twilio: [Core](467897662640): Received incoming SIP message from infra:
SIP/2.0 410 Gone
Via: SIP/2.0/TLS 192.168.1.x;received=68.173.232.203;branch=z9hG4bK-524287-1---bc41af82e73d6452;rport=49438
Contact: <sip:172.25.0.x:10193>
To: <sip:chunderm.gll.twilio.com:443;transport=tls>;tag=56581121_c3356d0b_5ffcb926-f5ea-4bd6-822a-5974252ed51d
From: <sip:VoiceSDK#chunderm.gll.twilio.com>;tag=f8d41af1
Call-ID: ZFfQioWu6JjChxSZFTJHjQ..
CSeq: 1 INVITE
Server: Twilio
X-Twilio-CallSid: CA00b436b4fdaad9c38063c20aa3e393bc
X-Twilio-EdgeHost: chunderm1.us1.twilio.com
X-Twilio-EdgeRegion: us1
X-Twilio-Zone: US_EAST_VIRGINIA
Content-Length: 0
2022-12-11 20:53:23.407 31878-4451/com.testD/Twilio: [Core](467897662640): onTerminated
2022-12-11 20:53:23.407 31878-4434/com.testD/Twilio: [Core](MediaFactoryImpl::signaling 0x0xb400006e1a331ce0): raiseCancelCallInvite
`
On answering the call, I would have expected to not to the cancelCallInvite event

Match an IP in a Multi-Line string in Lua

I'm trying to match the subnet portion of an IP address that is a multi-line string.
Here is the code:
a_sdp = "v=0
o=- 20064 20065 IN IP4 172.26.201.100
s=SDP data
c=IN IP4 172.26.201.100
t=0 0
m=audio 12662 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20 ";
rgex = "c=IN%sIP4%s(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.";
a_subnet = string.match(a_sdp,rgex,1);
I'm trying to match c=IN IP4 172.26.201and store capture 172.26.201 in group 1.
I've tried all sorts of things but I can't even seem to match even one value much less the portion of the ip address. I always get a_subnet = null.
Here is a simpler pattern:
a_sdp = [[v=0
o=- 20064 20065 IN IP4 172.26.201.100
s=SDP data
c=IN IP4 172.26.201.100
t=0 0
m=audio 12662 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
]]
print(a_sdp:match("c=IN%s+IP4%s*(.-)\n"))

Failed to set remote video description send parameters on native IOS

Here is sdpOffer:
offer
v=0
o=- 1514366952141741 1 IN IP4 hostx
s=Mountpoint 99
t=0 0
a=group:BUNDLE video
a=msid-semantic: WMS janus
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 hostx
a=sendonly
a=mid:video
a=rtcp-mux
a=ice-ufrag:7joH
a=ice-pwd:bdRP/kVha/3vSoGEvstOxK
a=ice-options:trickle
a=fingerprint:sha-256 D2:B9:31:8F:DF:24:D8:0E:ED:D2:EF:25:9E:AF:6F:B8:34:AE:53:9C:E6:F3:8F:F2:64:15:FA:E8:7F:53:2D:38
a=setup:actpass
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AH5Y1QWgUNNwEBAQI,aO48gA==
a=rtcp-fb:96 nack
a=rtcp-fb:96 goog-remb
a=ssrc:2233529852 cname:janusvideo
a=ssrc:2233529852 msid:janus janusv0
a=ssrc:2233529852 mslabel:janus
a=ssrc:2233529852 label:janusv0
a=candidate:1 1 udp 2013266431 host 42772 typ host
a=candidate:2 1 udp 2013266431 hostx 54166 typ host
a=candidate:1 2 udp 2013266430 host 54469 typ host
a=candidate:2 2 udp 2013266430 hostx 49119 typ host
a=end-of-candidates
I got the following error when I called setRemoteDescription on native IOS.
Failed to set remote video description send parameters
Please help!
The problem comes from this line:
profile-level-id 420029
My solution is simply to replace the "420029" by "42e01f", then everything works just fine. The situation seems related to the RFC 6184 8.2.2. You can visit here for more details.
I analyzed your SDP and I found that which is not correct . So you need to do compare bellow SDP , Even though if you get the problem then you can put bellow SDP format as hardcoded for debugging.
char const *local_OR_Remote_sdp =
"v=0\r\n\
o=- 4340022199490876901 2 IN IP4 127.0.0.1\r\n\
s=-\r\n\
t=0 0\r\n\
a=group:BUNDLE audio video\r\n\
a=msid-semantic: WMS ARDAMS\r\n\
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126\r\n\
c=IN IP4 0.0.0.0\r\n\
a=rtcp:9 IN IP4 0.0.0.0\r\n\
a=ice-ufrag:Gok2zrJABO7lhGB8\r\n\
a=ice-pwd:J1UXkVsMivK9+rqzPuP//OVe\r\n\
a=fingerprint:sha-256 1F:68:4B:D3:85:4E:11:4C:9B:F7:5A:B9:4C:74:0A:BD:D4:FC:8F:E6:53:68:81:20:D1:03:C9:A9:AD:86:5D:A2\r\n\
a=setup:actpass\r\n\
a=mid:audio\r\n\
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n\
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n\
a=sendrecv\r\n\
a=rtcp-mux\r\n\
a=rtpmap:111 opus/48000/2\r\n\
a=fmtp:111 minptime=10; useinbandfec=1\r\n\
a=rtpmap:103 ISAC/16000\r\n\
a=rtpmap:9 G722/8000\r\n\
a=rtpmap:102 ILBC/8000\r\n\
a=rtpmap:0 PCMU/8000\r\n\
a=rtpmap:8 PCMA/8000\r\n\
a=rtpmap:106 CN/32000\r\n\
a=rtpmap:105 CN/16000\r\n\
a=rtpmap:13 CN/8000\r\n\
a=rtpmap:127 red/8000\r\n\
a=rtpmap:126 telephone-event/8000\r\n\
a=maxptime:60\r\n\
a=ssrc:2271307011 cname:Pjjr5hQnoeV7A6WS\r\n\
a=ssrc:2271307011 msid:ARDAMS ARDAMSa0\r\n\
a=ssrc:2271307011 mslabel:ARDAMS\r\n\
a=ssrc:2271307011 label:ARDAMSa0\r\n\
m=video 9 UDP/TLS/RTP/SAVPF 100 101 116 117 96\r\n\
c=IN IP4 0.0.0.0\r\n\
a=rtcp:9 IN IP4 0.0.0.0\r\n\
a=ice-ufrag:Gok2zrJABO7lhGB8\r\n\
a=ice-pwd:J1UXkVsMivK9+rqzPuP//OVe\r\n\
a=fingerprint:sha-256 1F:68:4B:D3:85:4E:11:4C:9B:F7:5A:B9:4C:74:0A:BD:D4:FC:8F:E6:53:68:81:20:D1:03:C9:A9:AD:86:5D:A2\r\n\
a=setup:actpass\r\n\
a=mid:video\r\n\
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\n\
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n\
a=extmap:4 urn:3gpp:video-orientation\r\n\
a=sendrecv\r\n\
a=rtcp-mux\r\n\
a=rtpmap:100 VP8/90000\r\n\
a=rtcp-fb:100 ccm fir\r\n\
a=rtcp-fb:100 nack\r\n\
a=rtcp-fb:100 nack pli\r\n\
a=rtcp-fb:100 goog-remb\r\n\
a=rtcp-fb:100 transport-cc\r\n\
a=rtpmap:101 VP9/90000\r\n\
a=rtcp-fb:101 ccm fir\r\n\
a=rtcp-fb:101 nack\r\n\
a=rtcp-fb:101 nack pli\r\n\
a=rtcp-fb:101 goog-remb\r\n\
a=rtcp-fb:101 transport-cc\r\n\
a=rtpmap:116 red/90000\r\n\
a=rtpmap:117 ulpfec/90000\r\n\
a=rtpmap:96 rtx/90000\r\n\
a=fmtp:96 apt=100\r\n\
a=ssrc-group:FID 4091763228 2995868033\r\n\
a=ssrc:4091763228 cname:Pjjr5hQnoeV7A6WS\r\n\
a=ssrc:4091763228 msid:ARDAMS ARDAMSv0\r\n\
a=ssrc:4091763228 mslabel:ARDAMS\r\n\
a=ssrc:4091763228 label:ARDAMSv0\r\n\
a=ssrc:2995868033 cname:Pjjr5hQnoeV7A6WS\r\n\
a=ssrc:2995868033 msid:ARDAMS ARDAMSv0\r\n\
a=ssrc:2995868033 mslabel:ARDAMS\r\n\
a=ssrc:2995868033 label:ARDAMSv0\r\n\
";

WinRM Negotiate get 200 instead of 401

I am working on a Ruby on Rails application which uses the WinRM library to access a remote Windows server. The transport supplied is :negotiate which will negotiate the authentication with the remote server.
The issue is the WinRM library expects a 401 HTTP status code so that it can send more data for authentication. However, a 200 HTTP status code is returned and the negotiate fails.
The backtrace is :
NoMethodError: undefined method `split' for nil:NilClass
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/http/transport.rb:226:in `init_auth'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/http/transport.rb:166:in `send_request'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/winrm_service.rb:489:in `send_message'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/winrm_service.rb:390:in `run_wql'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/command_executor.rb:186:in `os_version'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/command_executor.rb:145:in `code_page'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/command_executor.rb:72:in `block in open'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/command_executor.rb:218:in `retryable'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/winrm-1.7.3/lib/winrm/command_executor.rb:71:in `open'
from (irb):20
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/commands/console.rb:110:in `start'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/commands/console.rb:9:in `start'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /home/cobalt/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'2.2.2 :021 >
The TCP Dump shows the below package exchanges
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:04:08.372376 IP d8b5d56cba65.53166 > pokcpeusap02.corp.absc.local.wsman: Flags [S], seq 2899844066, win 29200, options [mss 1460,sackOK,TS val 1316187676 ecr 0,nop,wscale 7], length 0
0x0000: 4500 003c 75fe 4000 4006 d486 0400 0005 E..<u.#.#.......
0x0010: 0acd e165 cfae 1761 acd8 1be2 0000 0000 ...e...a........
0x0020: a002 7210 f065 0000 0204 05b4 0402 080a ..r..e..........
0x0030: 4e73 6e1c 0000 0000 0103 0307 Nsn.........
12:04:08.421019 IP pokcpeusap02.corp.absc.local.wsman > d8b5d56cba65.53166: Flags [S.], seq 3702856093, ack 2899844067, win 8192, options [mss 1351,nop,wscale 8,sackOK,TS val 79780711 ecr 1316187676],
length 0
0x0000: 4500 003c 7f04 4000 7d06 8e80 0acd e165 E..<..#.}......e
0x0010: 0400 0005 1761 cfae dcb5 199d acd8 1be3 .....a..........
0x0020: a012 2000 754e 0000 0204 0547 0103 0308 ....uN.....G....
0x0030: 0402 080a 04c1 5b67 4e73 6e1c ......[gNsn.
12:04:08.421047 IP d8b5d56cba65.53166 > pokcpeusap02.corp.absc.local.wsman: Flags [.], ack 1, win 229, options [nop,nop,TS val 1316187725 ecr 79780711], length 0
0x0000: 4500 0034 75ff 4000 4006 d48d 0400 0005 E..4u.#.#.......
0x0010: 0acd e165 cfae 1761 acd8 1be3 dcb5 199e ...e...a........
0x0020: 8010 00e5 f05d 0000 0101 080a 4e73 6e4d .....]......NsnM
0x0030: 04c1 5b67 ..[g
12:04:08.421368 IP d8b5d56cba65.53166 > pokcpeusap02.corp.absc.local.wsman: Flags [P.], seq 1:340, ack 1, win 229, options [nop,nop,TS val 1316187725 ecr 79780711], length 339
0x0000: 4500 0187 7600 4000 4006 d339 0400 0005 E...v.#.#..9....
0x0010: 0acd e165 cfae 1761 acd8 1be3 dcb5 199e ...e...a........
0x0020: 8018 00e5 f1b0 0000 0101 080a 4e73 6e4d ............NsnM
0x0030: 04c1 5b67 504f 5354 202f 7773 6d61 6e20 ..[gPOST./wsman.
0x0040: 4854 5450 2f31 2e31 0d0a 4175 7468 6f72 HTTP/1.1..Author
0x0050: 697a 6174 696f 6e3a 204e 6567 6f74 6961 ization:.Negotia
0x0060: 7465 2054 6c52 4d54 564e 5455 4141 4241 te.TlRMTVNTUAABA
0x0070: 4141 414e 3449 4934 4151 4142 4141 6741 AAAN4II4AQABAAgA
0x0080: 4141 4141 4141 4141 4351 4141 4142 4462 AAAAAAAACQAAABDb
0x0090: 334a 775a 4468 694e 5751 314e 6d4e 6959 3JwZDhiNWQ1NmNiY
0x00a0: 5459 310d 0a43 6f6e 7465 6e74 2d54 7970 TY1..Content-Typ
0x00b0: 653a 2061 7070 6c69 6361 7469 6f6e 2f73 e:.application/s
0x00c0: 6f61 702b 786d 6c3b 6368 6172 7365 743d oap+xml;charset=
0x00d0: 5554 462d 380d 0a55 7365 722d 4167 656e UTF-8..User-Agen
0x00e0: 743a 2052 7562 7920 5769 6e52 4d20 436c t:.Ruby.WinRM.Cl
0x00f0: 6965 6e74 2028 322e 372e 312c 2072 7562 ient.(2.7.1,.rub
0x0100: 7920 322e 322e 3220 2832 3031 352d 3034 y.2.2.2.(2015-04
0x0110: 2d31 3329 290d 0a41 6363 6570 743a 202a -13))..Accept:.*
0x0120: 2f2a 0d0a 4461 7465 3a20 5475 652c 2030 /*..Date:.Tue,.0
0x0130: 3720 4d61 7220 3230 3137 2031 323a 3034 7.Mar.2017.12:04
0x0140: 3a30 3820 474d 540d 0a43 6f6e 7465 6e74 :08.GMT..Content
0x0150: 2d4c 656e 6774 683a 2030 0d0a 486f 7374 -Length:.0..Host
0x0160: 3a20 706f 6b63 7065 7573 6170 3032 2e63 :.pokcpeusap02.c
0x0170: 6f72 702e 6162 7363 2e6c 6f63 616c 3a35 orp.absc.local:5
0x0180: 3938 350d 0a0d 0a 985....
12:04:08.516497 IP pokcpeusap02.corp.absc.local.wsman > d8b5d56cba65.53166: Flags [P.], seq 1:39, ack 340, win 256, options [nop,nop,TS val 79780721 ecr 1316187725], length 38
0x0000: 4500 005a 7f05 4000 7d06 8e61 0acd e165 E..Z..#.}..a...e
0x0010: 0400 0005 1761 cfae dcb5 199e acd8 1d36 .....a.........6
0x0020: 8018 0100 11f4 0000 0101 080a 04c1 5b71 ..............[q
0x0030: 4e73 6e4d 4854 5450 2f31 2e31 2032 3030 NsnMHTTP/1.1.200
0x0040: 204f 4b0d 0a43 6f6e 7465 6e74 2d4c 656e .OK..Content-Len
0x0050: 6774 683a 2030 0d0a 0d0a gth:.0....
12:04:08.516541 IP d8b5d56cba65.53166 > pokcpeusap02.corp.absc.local.wsman: Flags [.], ack 39, win 229, options [nop,nop,TS val 1316187821 ecr 79780721], length 0
0x0000: 4500 0034 7601 4000 4006 d48b 0400 0005 E..4v.#.#.......
0x0010: 0acd e165 cfae 1761 acd8 1d36 dcb5 19c4 ...e...a...6....
0x0020: 8010 00e5 f05d 0000 0101 080a 4e73 6ead .....]......Nsn.
0x0030: 04c1 5b71 ..[q
What would be the issue? Why I don't get a 401 HTTP status code?
I havae managed to found the root cause of the issue. It turns out there is another service instead of WinRM srevice is listening to port 5985. Hence when a request is sent to that port, that service responded with a respone requiring Basic Authentication and the status code 200. The issue is fixed after starting WinRM service and make it listen at port 5985.
The detailed analysis can be found at Ruby WinRM undefined method `split' for nil:NilClass. It's really a good lesson to learn. Sometimes the issue is very simple and stupid, but to find out the issue would take much effort.

Client Certificate and NSURLSession

Okay, I am new to the wide wonders of SSL certificates and authentication so I am probably doing something very very obviously wrong here. But I am trying to setup an NSURLSession to download a file from server proxied through an SSL Gateway. For reasons involved with the solution we are building we want to use a non-standard CA for signing the cert. As a result I have a CACert, server certificate and a server private key. These have been worked into a pkcs12 file which I load to get the identity from the file and I then try to do a security trust evaluation with that cert.
What I get is that if I connect to a server that uses a publicly signed cert then the server trust authentication works just fine and I get the callbacks I am expecting. So I know I've done the delegate hookup correctly.
However with the client certificate challenge on the test URL indicated in the code I get a -9802 error. Which suggests that either the cert is being evaluated properly or I have got something else wrong. Indeed the server tries to move on to ServerTrust and then curls everything up. (But curiously the didBecomeInvalidWithError callback doesn't get called, which I was expecting when everything goes wrong.)
I have turned CFNetworking diagnostics on and the device log ends up looking like this :-
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:2] 15:38:38.524 {
AddCookies Continue: request GET https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001 HTTP/1.1
HTTPProtocol: Task: 14dcc7c0
} [3:2]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:3] 15:38:38.526 {
Protocol Enqueue: request GET https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001 HTTP/1.1
Request: <CFURLRequest 0x14f48f60 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Message: GET https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001 HTTP/1.1
Sending: dict [4] {
Accept-Encoding: gzip, deflate
Accept-Language: en-us
Accept: */
}
} [3:3]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:4] 15:38:38.533 {
SocketStream IO Logging
} [3:4]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:5] 15:38:38.544 {
TCP Connection Created
conn: 0x14f53d10 for name 103.20.137.69, port 444
} [3:5]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:6] 15:38:38.548 {
TCP Connection Start
conn: 0x14f53d10
} [3:6]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:7] 15:38:38.610 {
SocketStream TCP Connection Complete
conn: 0x14f53d10
fd: 7
error: 0
} [3:7]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:8] 15:38:38.613 {
{ fd: 7, local 10.47.29.209:53929 => peer 103.20.137.69:444 } RAW-SENT 201
RAW-SENT (7) | > data [ 201 ] bytes {
RAW-SENT (7) | > 00000000: 1603 0300 c401 0000 c003 0358 1168 ae99 ...........X.h..
RAW-SENT (7) | > 00000010: 94f9 5ed2 d848 bb05 c846 5654 71c9 e3c9 ..^..H...FVTq...
RAW-SENT (7) | > 00000020: cd65 210b a324 dacc 75e2 a900 0018 00ff .e!..$..u.......
RAW-SENT (7) | > 00000030: c02c c02b c024 c00a c023 c009 c030 c02f .,.+.$.-.#...0./
RAW-SENT (7) | > 00000040: c028 c027 c013 0100 007f 0000 0012 0010 .(.'............
RAW-SENT (7) | > 00000050: 0000 0d31 3033 2e32 302e 3133 372e 3639 ..-103.20.137.69
RAW-SENT (7) | > 00000060: 000a 0008 0006 0017 0018 0019 000b 0002 .-..............
RAW-SENT (7) | > 00000070: 0100 000d 000e 000c 0501 0401 0201 0503 ...-............
RAW-SENT (7) | > 00000080: 0403 0203 3374 0000 0010 0030 002e 0268 ....3t.....0...h
RAW-SENT (7) | > 00000090: 3205 6832 2d31 3605 6832 2d31 3505 6832 2.h2-16.h2-15.h2
RAW-SENT (7) | > 000000a0: 2d31 3408 7370 6479 2f33 2e31 0673 7064 -14.spdy/3.1.spd
RAW-SENT (7) | > 000000b0: 792f 3308 6874 7470 2f31 2e31 0005 0005 y/3.http/1.1....
RAW-SENT (7) | > 000000c0: 0100 0000 0000 1200 00 .........
RAW-SENT (7) | > }
} [3:8]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:9] 15:38:38.617 {
ioLogger
logStruct: array [4] {
BEGIN SSL RECORD DECODE: SENT
decodeHandshake [0] # 0x14f5d915, version 303, length 196 (0xc4)
ClientHello (1, 0x1), length 192 (0xc0)
END SSL RECORD DECODE: SENT
}
} [3:9]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:10] 15:38:38.718 {
{ fd: 7, local 10.47.29.209:53929 => peer 103.20.137.69:444 } RAW-READ 1368
RAW-READ (7) | < data [ 1368 ] bytes {
RAW-READ (7) | < 00000000: 1603 0305 a002 0000 4d03 0358 1168 b65d ........M..X.h.]
RAW-READ (7) | < 00000010: 4b61 2b40 e5f7 65d5 bbea a3d1 ce5d 113f Ka+#..e......].?
RAW-READ (7) | < 00000020: 86be 2d04 9288 fd34 2a86 d620 5811 68b6 ..-....4*.. X.h.
RAW-READ (7) | < 00000030: 51f5 0beb 192f 0954 9556 c1f8 6d18 1f4b Q..../.T.V..m..K
RAW-READ (7) | < 00000040: 5304 638c a110 b2f6 09ab cff2 c030 0000 S.c..........0..
RAW-READ (7) | < 00000050: 05ff 0100 0100 0b00 042b 0004 2800 0242 .........+..(..B
RAW-READ (7) | < 00000060: 3082 023e 3082 01a7 a003 0201 0202 0821 0..>0..........!
RAW-READ (7) | < 00000070: 92e4 4931 8b9b ad30 0d06 092a 8648 86f7 ..I1...0-..*.H..
RAW-READ (7) | < 00000080: 0d01 0105 0500 3025 3123 3021 0603 5504 -.....0%1#0!..U.
RAW-READ (7) | < 00000090: 030c 1a66 692d 706f 696e 7379 732d 7372 ...fi-poinsys-sr
RAW-READ (7) | < 000000a0: 762d 7465 7374 2d30 3031 2d63 6130 2017 v-test-001-ca0 .
RAW-READ (7) | < 000000b0: 0d30 3830 3332 3631 3335 3035 305a 180f -080326135050Z..
RAW-READ (7) | < 000000c0: 3230 3538 3033 3236 3133 3530 3530 5a30 20580326135050Z0
RAW-READ (7) | < 000000d0: 2d31 2b30 2906 0355 0403 0c22 6669 2d70 -1+0)..U..."fi-p
RAW-READ (7) | < 000000e0: 6f69 6e73 7973 2d73 7276 2d74 6573 7467 oinsys-srv-testg
RAW-READ (7) | < 000000f0: 7731 2d30 3031 2d67 656e 6572 616c 3081 w1-001-general0.
RAW-READ (7) | < 00000100: 9f30 0d06 092a 8648 86f7 0d01 0101 0500 .0-..*.H..-.....
RAW-READ (7) | < 00000110: 0381 8d00 3081 8902 8181 00b4 1d0e 5f53 ....0........._S
RAW-READ (7) | < 00000120: 9179 2d45 80d2 4746 2164 1cac 8613 3e67 .y-E..GF!d....>g
RAW-READ (7) | < 00000130: 628c 2514 0036 e770 ca16 15ed 73da 5997 b.%..6.p....s.Y.
RAW-READ (7) | < 00000140: 2c10 5c5f ce84 4225 5857 20a5 04af 2879 ,.\_..B%XW ...(y
RAW-READ (7) | < 00000150: 661a b7c5 a9db b05c dd47 a996 63ed 58e6 f......\.G..c.X.
RAW-READ (7) | < 00000160: 4d7a 34f4 e4b7 26fb 87c8 a08b 48e9 b504 Mz4...&.....H...
RAW-READ (7) | < 00000170: 4e01 9aa9 aea4 fb02 93b6 0816 0a9b 1054 N...........-..T
RAW-READ (7) | < 00000180: 6d7b 2647 dd66 ade5 e0f4 79f1 3b01 7bbf m{&G.f....y.;.{.
RAW-READ (7) | < 00000190: 044a 6954 6be1 408a ce75 8302 0301 0001 .JiTk.#..u......
RAW-READ (7) | < 000001a0: a36d 306b 3009 0603 551d 1304 0230 0030 .m0k0...U....0.0
RAW-READ (7) | < 000001b0: 5e06 0355 1d1f 0457 3055 3053 a051 a04f ^..U...W0U0S.Q.O
RAW-READ (7) | < 000001c0: 864d 6874 7470 733a 2f2f 706f 696e 7473 .Mhttps://points
RAW-READ (7) | < 000001d0: 736c 7465 7374 3a38 3434 332f 6b6d 732f sltest:8443/kms/
RAW-READ (7) | < 000001e0: 6372 6c2f 6765 7463 726c 2e68 746d 6c3f crl/getcrl.html?
RAW-READ (7) | < 000001f0: 6e61 6d65 3d66 692d 706f 696e 7379 732d name=fi-poinsys-
RAW-READ (7) | < 00000200: 7372 762d 7465 7374 2d30 3031 2d63 6130 srv-test-001-ca0
RAW-READ (7) | < 00000210: 0d06 092a 8648 86f7 0d01 0105 0500 0381 -..*.H..-.......
RAW-READ (7) | < 00000220: 8100 13f7 5f61 4699 d11c 1199 87d6 964a ...._aF........J
RAW-READ (7) | < 00000230: 7e37 4454 94e6 3f8c 063f c560 68f3 4f89 ~7DT..?..?.`h.O.
RAW-READ (7) | < 00000240: 9f53 1521 5cf3 aa47 f57c 007a e54b 1b47 .S.!\..G.|.z.K.G
RAW-READ (7) | < 00000250: 8c98 eaaa 235b 3fcf 819a 3df9 5540 a67b ....#[?...=.U#.{
RAW-READ (7) | < 00000260: 02f1 013a c2c7 a523 a679 438f 58b3 af01 ...:...#.yC.X...
RAW-READ (7) | < 00000270: 8a9e f3fb de96 ac7e 2d38 4216 a794 502e .......~-8B...P.
RAW-READ (7) | < 00000280: 1b7d 9ad5 cf3b 1ebe 745e c976 bb03 90f0 .}...;..t^.v....
RAW-READ (7) | < 00000290: f8a7 4b81 5319 197f 221d 0d5f 504b c69a ..K.S...".-_PK..
RAW-READ (7) | < 000002a0: 10aa 0001 e030 8201 dc30 8201 45a0 0302 .....0...0..E...
RAW-READ (7) | < 000002b0: 0102 0208 6c89 815a 8bf7 15f5 300d 0609 ....l..Z....0-..
RAW-READ (7) | < 000002c0: 2a86 4886 f70d 0101 0505 0030 2531 2330 *.H..-.....0%1#0
RAW-READ (7) | < 000002d0: 2106 0355 0403 0c1a 6669 2d70 6f69 6e73 !..U....fi-poins
RAW-READ (7) | < 000002e0: 7973 2d73 7276 2d74 6573 742d 3030 312d ys-srv-test-001-
RAW-READ (7) | < 000002f0: 6361 3020 170d 3038 3033 3236 3133 3530 ca0 .-0803261350
RAW-READ (7) | < 00000300: 3530 5a18 0f32 3035 3830 3332 3631 3335 50Z..20580326135
RAW-READ (7) | < 00000310: 3035 305a 3025 3123 3021 0603 5504 030c 050Z0%1#0!..U...
RAW-READ (7) | < 00000320: 1a66 692d 706f 696e 7379 732d 7372 762d .fi-poinsys-srv-
RAW-READ (7) | < 00000330: 7465 7374 2d30 3031 2d63 6130 819f 300d test-001-ca0..0-
RAW-READ (7) | < 00000340: 0609 2a86 4886 f70d 0101 0105 0003 818d ..*.H..-........
RAW-READ (7) | < 00000350: 0030 8189 0281 8100 859a a533 e990 210b .0.........3..!.
RAW-READ (7) | < 00000360: 58c1 8b58 984a fd75 337c c021 d374 02d8 X..X.J.u3|.!.t..
RAW-READ (7) | < 00000370: f640 ff05 3efd a51a 9df7 f6eb 1023 52bc .#..>........#R.
RAW-READ (7) | < 00000380: ac59 a650 e4ad 9d1f 02e6 97db c914 a01b .Y.P............
RAW-READ (7) | < 00000390: cd30 4945 8d71 5178 44f8 b4d4 9cba 2b8a .0IE.qQxD.....+.
RAW-READ (7) | < 000003a0: 9077 1d85 9547 9c49 a043 7879 6899 2048 .w...G.I.Cxyh. H
RAW-READ (7) | < 000003b0: 6fa5 d537 0010 0591 9d61 e854 5613 3d1d o..7.....a.TV.=.
RAW-READ (7) | < 000003c0: 4677 5f8a ddb8 8d4d a885 3984 1cd9 7550 Fw_....M..9...uP
RAW-READ (7) | < 000003d0: 96f4 acef 2a9f 7633 0203 0100 01a3 1330 ....*.v3.......0
RAW-READ (7) | < 000003e0: 1130 0f06 0355 1d13 0408 3006 0101 ff02 .0...U....0.....
RAW-READ (7) | < 000003f0: 0101 300d 0609 2a86 4886 f70d 0101 0505 ..0-..*.H..-....
RAW-READ (7) | < 00000400: 0003 8181 007b a0cd 116b a28f b536 67bf .....{...k...6g.
RAW-READ (7) | < 00000410: f87e 7b61 7543 411a 6047 7ca9 e54a 1a36 .~{auCA.`G|..J.6
RAW-READ (7) | < 00000420: e688 cd15 e346 e519 3f46 f900 79a8 e027 .....F..?F..y..'
RAW-READ (7) | < 00000430: 43f9 b963 a0f6 81d0 26c5 f66d 9d88 017d C..c....&..m...}
RAW-READ (7) | < 00000440: 7c99 3168 2cf4 dced 64f8 5624 81d2 6dd2 |.1h,...d.V$..m.
RAW-READ (7) | < 00000450: aaf4 0a0f c21d e196 e557 196c 0686 d698 ..-......W.l....
RAW-READ (7) | < 00000460: 5f6a 2d12 996c 3157 0ba7 ee35 498c db3a _j-..l1W...5I..:
RAW-READ (7) | < 00000470: 2835 34cb b6e5 b941 7fac bf9f cfaa 5b98 (54....A......[.
RAW-READ (7) | < 00000480: d118 ca76 360c 0000 c903 0017 4104 bf45 ...v6.......A..E
RAW-READ (7) | < 00000490: 344f 7916 08d2 fa31 ec81 ac4e 7baf bfe1 4Oy....1...N{...
RAW-READ (7) | < 000004a0: e04e 459d 2043 f3f9 8208 fce6 35ef bc99 .NE. C......5...
RAW-READ (7) | < 000004b0: b606 a4f7 19eb 3c16 7131 ade6 4952 1dc5 ......<.q1..IR..
RAW-READ (7) | < 000004c0: 3b21 3cde ab1d c06f 870e 6580 9489 0501 ;!<....o..e.....
RAW-READ (7) | < 000004d0: 0080 9468 d320 2901 bcb4 07b9 691c c9b2 ...h. ).....i...
RAW-READ (7) | < 000004e0: feae 734a dbb5 a658 a03f 93cb c769 2588 ..sJ...X.?...i%.
RAW-READ (7) | < 000004f0: 5e5d 011c 89bb dc6e 7d72 054e b173 c8f5 ^].....n}r.N.s..
RAW-READ (7) | < 00000500: 90c1 c0db d0ee a59d c69e 8a0f 0195 3d7b ..............={
RAW-READ (7) | < 00000510: c4f1 b067 5cb8 131c a79d ad43 0bc9 1cbd ...g\......C....
RAW-READ (7) | < 00000520: c8f0 4f57 9fbb 4680 3afa 182f af23 bea9 ..OW..F.:../.#..
RAW-READ (7) | < 00000530: 03dd c86d eb5a fae3 c449 a0b2 688e 4b0a ...m.Z...I..h.K-
RAW-READ (7) | < 00000540: 2188 f37b a27e 5fa2 4221 d52c a98b 7e90 !..{.~_.B!.,..~.
RAW-READ (7) | < 00000550: 5d81 0d00 004b 0301 ].-..K..
RAW-READ (7) | < }
} [3:10]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:11] 15:38:38.730 {
{ fd: 7, local 10.47.29.209:53929 => peer 103.20.137.69:444 } RAW-READ 77
RAW-READ (7) | < data [ 77 ] bytes {
RAW-READ (7) | < 00000000: 0240 0016 0603 0601 0503 0501 0403 0401 .#..............
RAW-READ (7) | < 00000010: 0303 0301 0203 0201 0202 002d 002b 3029 ...........-.+0)
RAW-READ (7) | < 00000020: 3127 3025 0603 5504 030c 1e66 692d 706f 1'0%..U....fi-po
RAW-READ (7) | < 00000030: 696e 7379 732d 7465 7374 636c 742d 636d insys-testclt-cm
RAW-READ (7) | < 00000040: 7331 2d30 3031 2d63 610e 0000 00 s1-001-ca....
RAW-READ (7) | < }
} [3:11]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:12] 15:38:38.732 {
ioLogger
logStruct: array [12] {
BEGIN SSL RECORD DECODE: READ
decodeHandshake [0] # 0x15c62025, version 303, length 1440 (0x5a0)
ServerHello (2, 0x2), length 77 (0x4d)
decodeHandshake [1] # 0x15c62076, version 303, length 1440 (0x5a0)
Certificate (11, 0xb), length 1067 (0x42b)
decodeHandshake [2] # 0x15c624a5, version 303, length 1440 (0x5a0)
ServerKeyExchange (12, 0xc), length 201 (0xc9)
decodeHandshake [3] # 0x15c62572, version 303, length 1440 (0x5a0)
CertificateRequest (13, 0xd), length 75 (0x4b)
decodeHandshake [4] # 0x15c625c1, version 303, length 1440 (0x5a0)
ServerHelloDone (14, 0xe), length 0 (0x0)
END SSL RECORD DECODE: READ
}
} [3:12]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:13] 15:38:38.739 {
Client Cert Requested
Distinguished Names: 1
0: << DATA <CFData 0x14def8c0 [0x38002170]>{length = 43, capacity = 43, bytes = 0x30293127302506035504030c1e66692d ... 312d3030312d6361} >>
} [3:13]
Oct 27 15:38:38 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:14] 15:38:38.742 {
Authentication Challenge
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Challenge: challenge space https://103.20.137.69:444/, ClientCertificateRequested (Hash c3626e29)
} [3:14]
Oct 27 15:38:38 Philip-Banks-ipod Unknown[791] <Error>:
Oct 27 15:38:43 Philip-Banks-ipod MPEtestApplication[793] <Error>: SecTrustEvaluate [leaf AnchorTrusted]
Oct 27 15:38:44 Philip-Banks-ipod MPEtestApplication[793] <Warning>: Certificates found: 1
Oct 27 15:38:44 Philip-Banks-ipod MPEtestApplication[793] <Error>: SecTrustEvaluate [leaf AnchorTrusted]
Oct 27 15:38:44 Philip-Banks-ipod MPEtestApplication[793] <Warning>: User: (null), certificates (
"<cert(0x160214f0) s: 400-133-738-MOB i: fi-poinsys-testclt-cms1-001-ca>"
) identity:<SecIdentityRef: 0x16020270>
Oct 27 15:38:46 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:15] 15:38:46.070 {
Use Credential
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Credential: Name: 400-133-738-MOB, Persistence: permanent
} [3:15]
Oct 27 15:38:46 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:16] 15:38:46.074 {
touchConnection
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Timeout Interval: 60.000 seconds
} [3:16]
Oct 27 15:38:46 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:17] 15:38:46.078 {
Peer certificate
Subject Sum: fi-poinsys-srv-testgw1-001-general
Summary: fi-poinsys-srv-test-001-ca
} [3:17]
Oct 27 15:38:46 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:18] 15:38:46.093 {
Authentication Challenge
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Challenge: challenge space https://103.20.137.69:444/, ServerTrustEvaluationRequested (Hash c3626e29)
} [3:18]
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:19] 15:38:47.250 {
Use Credential
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Credential: null
} [3:19]
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:20] 15:38:47.252 {
touchConnection
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Timeout Interval: 60.000 seconds
} [3:20]
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Error>: SecTrustEvaluate [leaf SSLHostname] [root AnchorTrusted]
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:21] 15:38:47.255 {
Response Error
Request: <CFURLRequest 0x14f48f60 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Error: Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamPropertySSLClientCertificateState=2, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x14f76660>, _kCFStreamErrorDomainKey=3, kCFStreamPropertySSLPeerCertificates=<CFArray 0x160274c0 [0x38002170]>{type = immutable, count = 2, values = (
0 : <cert(0x14f70280) s: fi-poinsys-srv-testgw1-001-general i: fi-poinsys-srv-test-001-ca>
1 : <cert(0x14f70520) s: fi-poinsys-srv-test-001-ca i: fi-poinsys-srv-test-001-ca>
)}, _kCFStreamPropertySSLClientCertificates=<CFArray 0x14f74740 [0x38002170]>{type = mutable-small, count = 2, values = (
0 : <SecIdentityRef: 0x16020270>
1 : <cert(0x160214f0) s: 400-133-738-MOB i: fi-poinsys-testclt-cms1-001-ca>
)}}
} [3:21]
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:22] 15:38:47.258 {
Did Fail
Loader: <CFURLRequest 0x14dcb620 [0x38002170]> {url = https://103.20.137.69:444/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001, cs = 0x0}
Error: Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamPropertySSLClientCertificateState=2, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x14f76660>, _kCFStreamErrorDomainKey=3, kCFStreamPropertySSLPeerCertificates=<CFArray 0x160274c0 [0x38002170]>{type = immutable, count = 2, values = (
0 : <cert(0x14f70280) s: fi-poinsys-srv-testgw1-001-general i: fi-poinsys-srv-test-001-ca>
1 : <cert(0x14f70520) s: fi-poinsys-srv-test-001-ca i: fi-poinsys-srv-test-001-ca>
)}, _kCFStreamPropertySSLClientCertificates=<CFArray 0x14f74740 [0x38002170]>{type = mutable-small, count = 2, values = (
0 : <SecIdentityRef: 0x16020270>
1 : <cert(0x160214f0) s: 400-133-738-MOB i: fi-poinsys-testclt-cms1-001-ca>
)}}
init to origin load: 0.011323s
total time: 8.75724s
total bytes: 0
} [3:22]
Oct 27 15:38:47 Philip-Banks-ipod MPEtestApplication[793] <Notice>: CFNetwork Diagnostics [3:23] 15:38:47.275 {
~HTTPProtocol: nullptr request
Request: null
sent: 0
received: 0
cell sent: 0
cell received: 0
} [3:23]
Which seems to be pretty clear that the authentication failed, but not why it failed at. I'd appreciate any useful suggestions here as I am kinda stuck at this point.
This code is being build using XCode 8 building against the 10 SDK and deploying it onto an iOS 9.3.5 device.
Here is the code in question :-
#import "testSSLClass.h"
#interface testSSLClass()<NSURLConnectionDelegate, NSURLSessionDelegate, NSURLSessionDataDelegate> {
NSString* mDownloadURL;
NSURLSessionConfiguration* mDownloadConfiguration;
NSURLSession* mDownloadSession;
NSURLSessionDataTask* mDownloadTask;
NSMutableData* mDataReceived;
}
#end
#implementation testSSLClass
-(instancetype)init
{
if (self = [super init])
{
mDownloadURL = #"https://103.20.137.69:443/downloadfile.aspx?filename=MON___00DADDF5FFFF00&tspid=100581332001";
mDownloadConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
}
return self;
}
-(void)doADownload
{
mDataReceived = [NSMutableData new];
NSURL* URLtoFetch = [NSURL URLWithString:mDownloadURL];
mDownloadSession = [NSURLSession sessionWithConfiguration:mDownloadConfiguration delegate:self delegateQueue:nil];
mDownloadTask = [mDownloadSession dataTaskWithURL:URLtoFetch];
[mDownloadTask resume];
}
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate]) {
[self willSendRequestForAuthenticationChallenge:challenge completionHandler:completionHandler];
} else {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
[mDataReceived appendData:data];
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask willCacheResponse:(NSCachedURLResponse *)proposedResponse completionHandler:(void (^)(NSCachedURLResponse * _Nullable))completionHandler
{
[mDataReceived length];
}
-(void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error
{
NSLog(#"Error: %#", [error userInfo]);
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeStreamTask:(NSURLSessionStreamTask *)streamTask
{
NSLog(#"Did Become Stream Task");
}
- (void)willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate])
{
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* directoryPath = [paths objectAtIndex:0];
NSString* cacertPath = [directoryPath stringByAppendingPathComponent:#"client.p12"];
NSData *p12data = [NSData dataWithContentsOfFile:cacertPath];
CFDataRef inP12data = (__bridge CFDataRef)p12data;
SecIdentityRef myIdentity;
SecTrustRef myTrust;
extractIdentityAndTrust(inP12data, &myIdentity, &myTrust);
assert(myIdentity != nil);
assert(myTrust != nil);
long count = SecTrustGetCertificateCount(myTrust);
NSMutableArray* myCertificates = nil;
if(count > 0) {
myCertificates = [NSMutableArray arrayWithCapacity:count];
for(int i = 0; i < count; ++i) {
[myCertificates addObject:(__bridge id)SecTrustGetCertificateAtIndex(myTrust, i)];
}
}
SecTrustResultType trustResult;
OSStatus evalResult = SecTrustEvaluate(myTrust, &trustResult);
if (trustResult == kSecTrustResultRecoverableTrustFailure)
{
CFDataRef errDataRef = SecTrustCopyExceptions(myTrust);
SecTrustSetExceptions(myTrust, errDataRef);
evalResult = SecTrustEvaluate(myTrust, &trustResult);
}
NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:myCertificates persistence:NSURLCredentialPersistencePermanent];
assert(credential != nil);
NSLog(#"User: %#, certificates %# identity:%#", [credential user], [credential certificates], [credential identity]);
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
} else {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
}
OSStatus extractIdentityAndTrust(CFDataRef inP12data, SecIdentityRef *identity, SecTrustRef *trust)
{
OSStatus securityError = errSecSuccess;
CFStringRef password = CFSTR("password");
const void *keys[] = { kSecImportExportPassphrase };
const void *values[] = { password };
CFDictionaryRef options = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
securityError = SecPKCS12Import(inP12data, options, &items);
if (securityError == 0) {
CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex(items, 0);
const void *tempIdentity = NULL;
tempIdentity = CFDictionaryGetValue(myIdentityAndTrust, kSecImportItemIdentity);
*identity = (SecIdentityRef)tempIdentity;
const void *tempTrust = NULL;
tempTrust = CFDictionaryGetValue(myIdentityAndTrust, kSecImportItemTrust);
*trust = (SecTrustRef)tempTrust;
CFIndex count = CFArrayGetCount(items);
NSLog(#"Certificates found: %ld",count);
}
if (options) {
CFRelease(options);
}
return securityError;
}
#end
Any suggestions, tips or advice gratefully accepted.
Philip
Okay, after some back and forth with a helpful Apple employee and banging a few heads locally to do certs in a sensible way this is the solution I ended up with :-
#import "testSSLClass.h"
#interface testSSLClass()<NSURLConnectionDelegate, NSURLSessionDelegate, NSURLSessionDataDelegate> {
NSString* mDownloadURL;
NSURLSessionConfiguration* mDownloadConfiguration;
NSURLSession* mDownloadSession;
NSURLSessionDataTask* mDownloadTask;
NSMutableData* mDataReceived;
}
#end
#implementation testSSLClass
-(instancetype)init
{
if (self = [super init])
{
mDownloadURL = #"https://your.server.url";
mDownloadConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
}
return self;
}
-(void)doADownload
{
mDataReceived = [NSMutableData new];
NSURL* URLtoFetch = [NSURL URLWithString:mDownloadURL];
mDownloadSession = [NSURLSession sessionWithConfiguration:mDownloadConfiguration delegate:self delegateQueue:nil];
mDownloadTask = [mDownloadSession dataTaskWithURL:URLtoFetch];
[mDownloadTask resume];
}
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate]) {
[self willSendRequestForAuthenticationChallenge:challenge completionHandler:completionHandler];
} else {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
NSLog(#"Appending data: %lu bytes", (unsigned long)[data length]);
[mDataReceived appendData:data];
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask willCacheResponse:(NSCachedURLResponse *)proposedResponse completionHandler:(void (^)(NSCachedURLResponse * _Nullable))completionHandler
{
// We got the data.
NSLog(#"Download finished: %lu bytes", (unsigned long)[mDataReceived length]);
completionHandler(NULL);
}
-(void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error
{
NSLog(#"Error: %#", [error userInfo]);
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeStreamTask:(NSURLSessionStreamTask *)streamTask
{
NSLog(#"Did Become Stream Task");
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
NSLog(#"Download finished: %lu bytes", (unsigned long)[mDataReceived length]);
if (error) {
NSLog(#"Error: %#", [error userInfo]);
}
}
#pragma NSURLConnection delegate
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(#"Error: %#", [error userInfo]);
}
- (void)willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate])
{
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* directoryPath = [paths objectAtIndex:0];
NSString* cacertPath = [directoryPath stringByAppendingString:#"/client.p12"];
NSData *p12data = [NSData dataWithContentsOfFile:cacertPath];
CFDataRef inP12data = (__bridge CFDataRef)p12data;
SecIdentityRef myIdentity = nil;
extractIdentity(inP12data, &myIdentity);
assert(myIdentity != nil);
NSURLCredential* credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:nil persistence:NSURLCredentialPersistenceNone];
assert(credential != nil);
NSLog(#"User: %#, certificates %# identity:%#", [credential user], [credential certificates], [credential identity]);
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
} else {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
}
OSStatus extractIdentity(CFDataRef inP12data, SecIdentityRef *identity)
{
OSStatus securityError = errSecSuccess;
CFStringRef password = CFSTR("password");
const void *keys[] = { kSecImportExportPassphrase };
const void *values[] = { password };
CFDictionaryRef options = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
securityError = SecPKCS12Import(inP12data, options, &items);
if (securityError == errSecSuccess) {
CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex(items, 0);
const void *tempIdentity = NULL;
tempIdentity = CFDictionaryGetValue(myIdentityAndTrust, kSecImportItemIdentity);
*identity = (SecIdentityRef)tempIdentity;
CFIndex count = CFArrayGetCount(items);
NSLog(#"Certificates found: %ld",count);
}
if (options) {
CFRelease(options);
}
return securityError;
}
#end
We use a locally downloaded pkcs12 format file which has the private key and the cert to establish an indentity. The cert is now being signed by a public CA which means iOS is all happy and things now work nicely. Hopefully this is useful for someone else banging their head a bit.

Resources