115
115
if (usbmuxd_get_device_list(&dev_list) < 0) {
116
debug_info("ERROR: usbmuxd is not running!\n", __func__);
116
debug_info("ERROR: usbmuxd is not running!", __func__);
117
117
return IDEVICE_E_NO_DEVICE;
238
238
new_connection->type = CONNECTION_USBMUXD;
239
239
new_connection->data = (void*)(long)sfd;
240
240
new_connection->ssl_data = NULL;
241
idevice_get_udid(device, &new_connection->udid);
241
242
*connection = new_connection;
242
243
return IDEVICE_E_SUCCESS;
266
267
idevice_error_t result = IDEVICE_E_UNKNOWN_ERROR;
267
268
if (connection->type == CONNECTION_USBMUXD) {
268
269
usbmuxd_disconnect((int)(long)connection->data);
270
connection->data = NULL;
269
271
result = IDEVICE_E_SUCCESS;
271
273
debug_info("Unknown connection type %d", connection->type);
276
if (connection->udid)
277
free(connection->udid);
273
279
free(connection);
378
386
if (connection->ssl_data) {
379
387
#ifdef HAVE_OPENSSL
380
int received = SSL_read(connection->ssl_data->session, (void*)data, (int)len);
388
uint32_t received = 0;
389
while (received < len) {
390
int r = SSL_read(connection->ssl_data->session, (void*)((char*)(data+received)), (int)len-received);
381
397
debug_info("SSL_read %d, received %d", len, received);
383
399
ssize_t received = gnutls_record_recv(connection->ssl_data->session, (void*)data, (size_t)len);
591
607
#ifndef STRIP_DEBUG_CODE
592
608
static const char *errorstring(int e)
596
return "SSL_ERROR_NONE";
598
return "SSL_ERROR_SSL";
599
case SSL_ERROR_WANT_READ:
600
return "SSL_ERROR_WANT_READ";
601
case SSL_ERROR_WANT_WRITE:
602
return "SSL_ERROR_WANT_WRITE";
603
case SSL_ERROR_WANT_X509_LOOKUP:
604
return "SSL_ERROR_WANT_X509_LOOKUP";
605
case SSL_ERROR_SYSCALL:
606
return "SSL_ERROR_SYSCALL";
607
case SSL_ERROR_ZERO_RETURN:
608
return "SSL_ERROR_ZERO_RETURN";
609
case SSL_ERROR_WANT_CONNECT:
610
return "SSL_ERROR_WANT_CONNECT";
611
case SSL_ERROR_WANT_ACCEPT:
612
return "SSL_ERROR_WANT_ACCEPT";
614
return "UNKOWN_ERROR_VALUE";
612
return "SSL_ERROR_NONE";
614
return "SSL_ERROR_SSL";
615
case SSL_ERROR_WANT_READ:
616
return "SSL_ERROR_WANT_READ";
617
case SSL_ERROR_WANT_WRITE:
618
return "SSL_ERROR_WANT_WRITE";
619
case SSL_ERROR_WANT_X509_LOOKUP:
620
return "SSL_ERROR_WANT_X509_LOOKUP";
621
case SSL_ERROR_SYSCALL:
622
return "SSL_ERROR_SYSCALL";
623
case SSL_ERROR_ZERO_RETURN:
624
return "SSL_ERROR_ZERO_RETURN";
625
case SSL_ERROR_WANT_CONNECT:
626
return "SSL_ERROR_WANT_CONNECT";
627
case SSL_ERROR_WANT_ACCEPT:
628
return "SSL_ERROR_WANT_ACCEPT";
630
return "UNKOWN_ERROR_VALUE";
662
678
key_data_t root_cert = { NULL, 0 };
663
679
key_data_t root_privkey = { NULL, 0 };
665
userpref_error_t uerr = userpref_get_keys_and_certs(&root_privkey, &root_cert, NULL, NULL);
681
userpref_error_t uerr = userpref_device_record_get_keys_and_certs(connection->udid, &root_privkey, &root_cert, NULL, NULL);
666
682
if (uerr != USERPREF_E_SUCCESS) {
667
683
debug_info("Error %d when loading keys and certificates! %d", uerr);
720
736
SSL_set_bio(ssl, ssl_bio, ssl_bio);
722
738
return_me = SSL_do_handshake(ssl);
723
if (return_me != 1) {
739
if (return_me != 1) {
724
740
debug_info("ERROR in SSL_do_handshake: %s", errorstring(SSL_get_error(ssl, return_me)));
726
742
SSL_CTX_free(ssl_ctx);
728
744
ssl_data_t ssl_data_loc = (ssl_data_t)malloc(sizeof(struct ssl_data_private));
729
745
ssl_data_loc->session = ssl;
730
746
ssl_data_loc->ctx = ssl_ctx;
731
ssl_data_loc->bio = ssl_bio;
732
747
connection->ssl_data = ssl_data_loc;
733
748
ret = IDEVICE_E_SUCCESS;
734
749
debug_info("SSL mode enabled, cipher: %s", SSL_get_cipher(ssl));
752
767
gnutls_x509_privkey_init(&ssl_data_loc->root_privkey);
753
768
gnutls_x509_privkey_init(&ssl_data_loc->host_privkey);
755
userpref_error_t uerr = userpref_get_keys_and_certs(ssl_data_loc->root_privkey, ssl_data_loc->root_cert, ssl_data_loc->host_privkey, ssl_data_loc->host_cert);
770
userpref_error_t uerr = userpref_device_record_get_keys_and_certs(connection->udid, ssl_data_loc->root_privkey, ssl_data_loc->root_cert, ssl_data_loc->host_privkey, ssl_data_loc->host_cert);
756
771
if (uerr != USERPREF_E_SUCCESS) {
757
772
debug_info("Error %d when loading keys and certificates! %d", uerr);
806
821
#ifdef HAVE_OPENSSL
807
822
if (connection->ssl_data->session) {
808
SSL_shutdown(connection->ssl_data->session);
823
/* see: https://www.openssl.org/docs/ssl/SSL_shutdown.html#RETURN_VALUES */
824
if (SSL_shutdown(connection->ssl_data->session) == 0) {
825
SSL_shutdown(connection->ssl_data->session);
811
829
if (connection->ssl_data->session) {