From: Sooyoung Ha Date: Mon, 21 Aug 2017 10:36:29 +0000 (+0900) Subject: transport.c: align indent and remove redundant code X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6e926eaefc49d5c83e60f57530495c0139128af;p=sdk%2Ftools%2Fsdb.git transport.c: align indent and remove redundant code Signed-off-by: Sooyoung Ha --- diff --git a/src/transport.c b/src/transport.c index 8fc8309..1911267 100755 --- a/src/transport.c +++ b/src/transport.c @@ -59,7 +59,7 @@ int vasprintf( char **sptr, char *fmt, va_list argv ) int wanted = vsnprintf( *sptr = NULL, 0, fmt, argv ); if( (wanted > 0) && ((*sptr = malloc( 1 + wanted )) != NULL) ) - return vsprintf( *sptr, fmt, argv ); + return vsprintf( *sptr, fmt, argv ); return wanted; } @@ -119,8 +119,7 @@ static void dump_hex( const unsigned char* ptr, size_t len) } -void -kick_transport(TRANSPORT* t) +void kick_transport(TRANSPORT* t) { if (t && !t->kicked) { @@ -217,21 +216,21 @@ static void encoding_packet(PACKET* p) { void send_packet(PACKET *p, TRANSPORT *t) { - D("go send packet\n"); + D("go send packet\n"); if(t != NULL && t->connection_state != CS_OFFLINE) { #ifdef SUPPORT_ENCRYPT // 현재 연결이 암호화 모드이고 암호화 handshaking관련 메시지가 아니면, 메시지 암호화 - if (t->encryption == ENCR_ON && p->msg.command != A_ENCR) { + if (t->encryption == ENCR_ON && p->msg.command != A_ENCR) { security_encrypt(t->sessionID, p->data, &(p->msg.data_length)); - } - else if(t->encryption == ENCR_OFF) { + } + else if(t->encryption == ENCR_OFF) { - } + } #endif - D("before encoding to %s\n", t->serial); + D("before encoding to %s\n", t->serial); encoding_packet(p); D("after encoding to %s\n", t->serial); @@ -240,7 +239,7 @@ void send_packet(PACKET *p, TRANSPORT *t) D("sended packet to %s\n", t->serial); } else { - D("transport is null\n"); + D("transport is null\n"); if (t == NULL) { D("Transport is null \n"); errno = 0; @@ -414,21 +413,21 @@ void send_cmd(unsigned arg0, unsigned arg1, unsigned cmd, char* data, TRANSPORT* //LCOV_EXCL_START #ifdef SUPPORT_ENCRYPT /* -desc. : 암호화 모드 변경 실패 시, sdbd에게 실패 메시지 전송 -parameter : [in] SDB_SOCKET* sock : local socket - [in] TRANSPORT* t : 현재 연결 중인 atransport - [in] unsigned failed_value : 실패 값 + desc. : 암호화 모드 변경 실패 시, sdbd에게 실패 메시지 전송 + parameter : [in] SDB_SOCKET* sock : local socket + [in] TRANSPORT* t : 현재 연결 중인 atransport + [in] unsigned failed_value : 실패 값 */ void send_encr_fail(SDB_SOCKET* sock, TRANSPORT* t, unsigned failed_value) { - D("calling send_encr_fail"); - apacket *p; - p = get_apacket(); - p->msg.command = A_ENCR; // 암호화 handshaking 메시지 - p->msg.arg0 = failed_value; // 실패 값 - p->msg.arg1 = sock->local_id; // client를 구분하는 값 - send_packet(p, t); - put_apacket(p); + D("calling send_encr_fail"); + apacket *p; + p = get_apacket(); + p->msg.command = A_ENCR; // 암호화 handshaking 메시지 + p->msg.arg0 = failed_value; // 실패 값 + p->msg.arg1 = sock->local_id; // client를 구분하는 값 + send_packet(p, t); + put_apacket(p); } #endif //LCOV_EXCL_STOP @@ -454,48 +453,48 @@ read_loop: LOG_INFO("T(%s) remote read start\n", t->serial); if(t->read_from_remote(t, &p->msg, sizeof(MESSAGE))) { - break; + break; } - if(check_header(p, t)) { - break; - } - if(p->msg.data_length) { - if(t->read_from_remote(t, p->data, p->msg.data_length)){ - break; - } + if(check_header(p, t)) { + break; + } + if(p->msg.data_length) { + if(t->read_from_remote(t, p->data, p->msg.data_length)){ + break; + } #ifdef SUPPORT_ENCRYPT - //security_decrypt(t->sfd, p); + //security_decrypt(t->sfd, p); // 현재 연결이 암호화 모드이고, 암호화 handshaking 관련 메시지가 아닌 경우면, 메시지 복호화 - if (t->encryption == ENCR_ON && p->msg.command != A_ENCR) { - security_decrypt(t->sessionID, p->data, &(p->msg.data_length)); - } + if (t->encryption == ENCR_ON && p->msg.command != A_ENCR) { + security_decrypt(t->sessionID, p->data, &(p->msg.data_length)); + } #endif - } - if(check_data(p)) { - break; - } + } + if(check_data(p)) { + break; + } - dump_packet(t->serial, "remote_read", p); - D("%s: received remote packet, sending to transport\n", - t->serial); - handle_packet(p, t); + dump_packet(t->serial, "remote_read", p); + D("%s: received remote packet, sending to transport\n", + t->serial); + handle_packet(p, t); } - LOG_INFO("T(%s) remote read fail. terminate transport\n", t->serial); - put_apacket(p); + LOG_INFO("T(%s) remote read fail. terminate transport\n", t->serial); + put_apacket(p); - if(t->suspended == 1) { - LOG_INFO("T(%s) connection is closed in suspended mode\n"); - sdb_close(t->sfd); - while(1) { + if(t->suspended == 1) { + LOG_INFO("T(%s) connection is closed in suspended mode\n"); + sdb_close(t->sfd); + while(1) { - t->sfd = sdb_host_connect(t->host, t->sdb_port, SOCK_STREAM); + t->sfd = sdb_host_connect(t->host, t->sdb_port, SOCK_STREAM); - if( t->sfd < 0) { - LOG_INFO("T(%s) dies during suspended mode\n"); - break; - } + if( t->sfd < 0) { + LOG_INFO("T(%s) dies during suspended mode\n"); + break; + } close_on_exec(t->sfd); disable_tcp_nagle(t->sfd); @@ -506,9 +505,9 @@ read_loop: } sdb_close(t->sfd); LOG_INFO("T(%s) still in suspended mode, sleep 2 sec\n"); - sdb_sleep_ms(2000); - } - } + sdb_sleep_ms(2000); + } + } t->connection_state = CS_OFFLINE; @@ -544,7 +543,7 @@ void register_transport(TRANSPORT *t) LOG_FATAL("cannot create output thread\n"); } - /* put us on the master device list */ + /* put us on the master device list */ sdb_mutex_lock(&transport_lock, "transport register_transport"); t->node = prepend(&transport_list, t); sdb_mutex_unlock(&transport_lock, "transport register_transport"); @@ -675,7 +674,7 @@ int list_targets(char* buf, size_t bufsize, transport_type ttype) { char* end = buf + bufsize; int len; - /* XXX OVERRUN PROBLEMS XXX */ + /* XXX OVERRUN PROBLEMS XXX */ sdb_mutex_lock(&transport_lock, "transport list_transports"); LIST_NODE* curptr = transport_list; @@ -725,7 +724,7 @@ int list_forwarding(char* buf, size_t bufsize) { len = snprintf(p, end - p, "%-20s\t%-10s\t%s\n", device_serial, localPort, remotePort); if (p + len >= end) { /* discard last line if buffer is too short */ - break; + break; } p += len; } @@ -740,7 +739,7 @@ int list_forwarding(char* buf, size_t bufsize) { #if 0 int register_device_con_transport(int s, const char *serial) { - if(current_local_transports >= SDB_LOCAL_TRANSPORT_MAX) { + if(current_local_transports >= SDB_LOCAL_TRANSPORT_MAX) { LOG_ERROR("Too many tcp connection\n"); return -1; } @@ -875,7 +874,7 @@ void wakeup_select_func(int _fd, unsigned ev, void *data) { int length = readx(_fd, &t_packet, sizeof(t_packet)); if(length == -1) { - LOG_DEBUG("wakeup_select_func(): cannot read FD(%d) transport packet\n", _fd); + LOG_DEBUG("wakeup_select_func(): cannot read FD(%d) transport packet\n", _fd); } TRANSPORT* t= t_packet->t; @@ -896,29 +895,29 @@ void wakeup_select_func(int _fd, unsigned ev, void *data) { //TODO REMOTE_DEVICE_CONNECT //CNXN cannot be distinguished using remote_con_flag -// if(t->remote_cnxn_socket != NULL && cmd == A_CNXN) { -// dump_packet("remote_con", "wakeup_select_func", p); -// sock = t->remote_cnxn_socket->data; -// if(sock != NULL) { -// remove_first(&(t->remote_cnxn_socket), no_free); -// LOG_INFO("LS_L(%X)\n", sock->local_id); -// p->ptr = (void*)(&p->msg); -// p->len = sizeof(MESSAGE) + p->msg.data_length; -// local_socket_enqueue(sock, p); -// } -// goto endup; -// } -// //If transport is remote device, packet should not have to be decoded. -// if((local_id & remote_con_flag) && t->type != kTransportRemoteDevCon) { -// LOG_INFO("LS_L(%X), LS_R(%X), LS_E(%X)\n", decoding_to_local_ls_id(local_id), -// decoding_to_remote_ls_id(local_id), local_id); -// sock = find_local_socket(decoding_to_local_ls_id(local_id)); -// p->msg.arg1 = decoding_to_remote_ls_id(local_id); -// p->ptr = (void*)(&p->msg); -// p->len = sizeof(MESSAGE) + p->msg.data_length; -// local_socket_enqueue(sock, p); -// goto endup; -// } + // if(t->remote_cnxn_socket != NULL && cmd == A_CNXN) { + // dump_packet("remote_con", "wakeup_select_func", p); + // sock = t->remote_cnxn_socket->data; + // if(sock != NULL) { + // remove_first(&(t->remote_cnxn_socket), no_free); + // LOG_INFO("LS_L(%X)\n", sock->local_id); + // p->ptr = (void*)(&p->msg); + // p->len = sizeof(MESSAGE) + p->msg.data_length; + // local_socket_enqueue(sock, p); + // } + // goto endup; + // } + // //If transport is remote device, packet should not have to be decoded. + // if((local_id & remote_con_flag) && t->type != kTransportRemoteDevCon) { + // LOG_INFO("LS_L(%X), LS_R(%X), LS_E(%X)\n", decoding_to_local_ls_id(local_id), + // decoding_to_remote_ls_id(local_id), local_id); + // sock = find_local_socket(decoding_to_local_ls_id(local_id)); + // p->msg.arg1 = decoding_to_remote_ls_id(local_id); + // p->ptr = (void*)(&p->msg); + // p->len = sizeof(MESSAGE) + p->msg.data_length; + // local_socket_enqueue(sock, p); + // goto endup; + // } sock = find_local_socket(local_id); if(c_state != CS_OFFLINE && sock != NULL) { @@ -954,10 +953,10 @@ void wakeup_select_func(int _fd, unsigned ev, void *data) { * Can receive A_CNXN multiple times if we apply connection timeout * Block code which kills connection when it gets A_CNXN multiple times */ -// if(t->connection_state != CS_OFFLINE) { -// t->connection_state = CS_OFFLINE; -// run_transport_close(t); -// } + // if(t->connection_state != CS_OFFLINE) { + // t->connection_state = CS_OFFLINE; + // run_transport_close(t); + // } update_version(t, p->msg.arg0, p->msg.arg1); parse_banner((char*) p->data, t); } @@ -993,114 +992,101 @@ void wakeup_select_func(int _fd, unsigned ev, void *data) { send_auth_publickey(t); LOG_DEBUG("send auth ok !!\n"); } -#if 0 // daemon code (never happened in sdb server) - } else if (p->msg.arg0 == ADB_AUTH_SIGNATURE) { - if (adb_auth_verify(t->token, p->data, p->msg.data_length)) { - adb_auth_verified(t); - t->failed_auth_attempts = 0; - } else { - if (t->failed_auth_attempts++ > 10) - sdb_sleep_ms(1000); - send_auth_request(t); - } - } else if (p->msg.arg0 == ADB_AUTH_RSAPUBLICKEY) { - adb_auth_confirm_key(p->data, p->msg.data_length, t); -#endif } - } + } #ifdef SUPPORT_ENCRYPT - else if(cmd == A_ENCR){ // 암호화 handshaking메시지인 경우 - PACKET* enc_p = get_apacket(); - if(p->msg.arg0 == ENCR_SET_ON_REQ){ // hello 메시지인 경우 - if(security_parse_client_hello(t->sessionID, p->data, &(p->msg.data_length)) == 1) // hello 메시지 파싱 - { - if(security_gen_server_ack(t->sessionID, enc_p->data, &(enc_p->msg.data_length)) == 1) // ack 메시지 생성 - { - enc_p->msg.command = A_ENCR; // 암호화 handshaking 메시지 - enc_p->msg.arg0 = ENCR_SET_ON_OK; // ack 메시지 - enc_p->msg.arg1 = sock->local_id; // client구분하는 값 - send_packet(enc_p, t); - - D("security_gen_server_ack success"); - } else { // ack 메시지 생성 실패 - LOG_ERROR("security_gen_server_ack failed"); - security_deinit(t->sessionID); - send_encr_fail(sock, t, ENCR_ON_FAIL); // 암호화 모드 on을 실패했다는 메시지를 sdbd로 보냄 - t->encryption = ENCR_OFF; // 암호화 모드는 off - sendfailmsg(sock->fd, "Encryption ON failed"); - local_socket_close(sock); - - } - } else { // hello 메시지 파싱 실패 - LOG_ERROR("security_parse_client_hello failed"); - security_deinit(t->sessionID); - send_encr_fail(sock, t, ENCR_ON_FAIL); // 암호화 모드 on을 실패했다는 메시지를 sdbd로 보냄 - t->encryption = ENCR_OFF; // 암호화 모드는 off - sendfailmsg(sock->fd, "Encryption ON failed"); - local_socket_close(sock); - } - } - else if(p->msg.arg0 == ENCR_SET_ON_OK){ // ack 메시지인 경우 - if(security_parse_client_ack(t->sessionID, p->data, &(p->msg.data_length)) == 1) // ack 메시지 파싱 - { - t->encryption = ENCR_ON; // 모든 handshaking이 끝난 후 현재 연결에 대해서는 암호화 모드 ON - sendokmsg(sock->fd, "Encryption is ON"); - } - else{ // ack 메시지 파싱 실패 - LOG_ERROR("security_parse_client_ack failed"); - security_deinit(t->sessionID); - send_encr_fail(sock, t, ENCR_ON_FAIL); // 암호화 모드 on을 실패했다는 메시지를 sdbd로 보냄 - t->encryption = ENCR_OFF; // 암호화 모드는 off - sendfailmsg(sock->fd, "Encryption ON failed"); - } - local_socket_close(sock); - - } - else if(p->msg.arg0 == ENCR_SET_OFF){ // 암호화 모드 off 메시지 - if(t->encryption == ENCR_ON && security_deinit(t->sessionID) == 1) // 현재 연결에 대해 암호화 모드가 on상태이면 - { - t->encryption = ENCR_OFF; // 현재 연결에 대한 암호화 모드를 off - sendokmsg(sock->fd, "Encryption is OFF"); - } - else{ - if(sock != NULL) { - send_encr_fail(sock, t, ENCR_OFF_FAIL); - sendfailmsg(sock->fd, "Encryption OFF failed"); - } - LOG_ERROR("security_deinit failed"); - } - local_socket_close(sock); - } - else if(p->msg.arg0 == ENCR_GET){ // 암호화 모드 get 메시지 - if(t->encryption == ENCR_ON && !strncmp((char*)p->data, "encryption:on", p->msg.data_length)) // 현재 연결이 암호화 모드 on이고, sdbd의 암호화 모드가 on인 경우 - { - sendokmsg(sock->fd, "Encryption is ON"); - } - else if(t->encryption == ENCR_OFF && !strncmp((char*)p->data, "encryption:off", p->msg.data_length)) // 현재 연결이 암호화 모드 off이고, sdbd의 암호화 모드가 off인 경우 - { - sendokmsg(sock->fd, "Encryption is OFF"); - } - else - { - sendfailmsg(sock->fd, "Getting Encryption status failed, try encyrption on/off"); - } - local_socket_close(sock); - } - else if(p->msg.arg0 == ENCR_ON_FAIL){ // sdbd에서 암호화 모드 on에 실패했을 경우 받는 메시지 - t->encryption = ENCR_OFF; // 암호화를 on하다가 실패한 경우, 현재 연결에 대한 암호화 모드를 off - sendfailmsg(sock->fd, "Encryption ON failed"); - local_socket_close(sock); - } - else if(p->msg.arg0 == ENCR_OFF_FAIL){ // sdbd에서 암호화 모드 off에 실패했을 경우 받는 메시지 - //t->encryption = ENCR_ON; - if (sock != NULL) { - sendfailmsg(sock->fd, "Encryption OFF failed"); - local_socket_close(sock); - } - } - put_apacket(enc_p); - - } + else if(cmd == A_ENCR){ // 암호화 handshaking메시지인 경우 + PACKET* enc_p = get_apacket(); + if(p->msg.arg0 == ENCR_SET_ON_REQ){ // hello 메시지인 경우 + if(security_parse_client_hello(t->sessionID, p->data, &(p->msg.data_length)) == 1) // hello 메시지 파싱 + { + if(security_gen_server_ack(t->sessionID, enc_p->data, &(enc_p->msg.data_length)) == 1) // ack 메시지 생성 + { + enc_p->msg.command = A_ENCR; // 암호화 handshaking 메시지 + enc_p->msg.arg0 = ENCR_SET_ON_OK; // ack 메시지 + enc_p->msg.arg1 = sock->local_id; // client구분하는 값 + send_packet(enc_p, t); + + D("security_gen_server_ack success"); + } else { // ack 메시지 생성 실패 + LOG_ERROR("security_gen_server_ack failed"); + security_deinit(t->sessionID); + send_encr_fail(sock, t, ENCR_ON_FAIL); // 암호화 모드 on을 실패했다는 메시지를 sdbd로 보냄 + t->encryption = ENCR_OFF; // 암호화 모드는 off + sendfailmsg(sock->fd, "Encryption ON failed"); + local_socket_close(sock); + + } + } else { // hello 메시지 파싱 실패 + LOG_ERROR("security_parse_client_hello failed"); + security_deinit(t->sessionID); + send_encr_fail(sock, t, ENCR_ON_FAIL); // 암호화 모드 on을 실패했다는 메시지를 sdbd로 보냄 + t->encryption = ENCR_OFF; // 암호화 모드는 off + sendfailmsg(sock->fd, "Encryption ON failed"); + local_socket_close(sock); + } + } + else if(p->msg.arg0 == ENCR_SET_ON_OK){ // ack 메시지인 경우 + if(security_parse_client_ack(t->sessionID, p->data, &(p->msg.data_length)) == 1) // ack 메시지 파싱 + { + t->encryption = ENCR_ON; // 모든 handshaking이 끝난 후 현재 연결에 대해서는 암호화 모드 ON + sendokmsg(sock->fd, "Encryption is ON"); + } + else{ // ack 메시지 파싱 실패 + LOG_ERROR("security_parse_client_ack failed"); + security_deinit(t->sessionID); + send_encr_fail(sock, t, ENCR_ON_FAIL); // 암호화 모드 on을 실패했다는 메시지를 sdbd로 보냄 + t->encryption = ENCR_OFF; // 암호화 모드는 off + sendfailmsg(sock->fd, "Encryption ON failed"); + } + local_socket_close(sock); + + } + else if(p->msg.arg0 == ENCR_SET_OFF){ // 암호화 모드 off 메시지 + if(t->encryption == ENCR_ON && security_deinit(t->sessionID) == 1) // 현재 연결에 대해 암호화 모드가 on상태이면 + { + t->encryption = ENCR_OFF; // 현재 연결에 대한 암호화 모드를 off + sendokmsg(sock->fd, "Encryption is OFF"); + } + else{ + if(sock != NULL) { + send_encr_fail(sock, t, ENCR_OFF_FAIL); + sendfailmsg(sock->fd, "Encryption OFF failed"); + } + LOG_ERROR("security_deinit failed"); + } + local_socket_close(sock); + } + else if(p->msg.arg0 == ENCR_GET){ // 암호화 모드 get 메시지 + if(t->encryption == ENCR_ON && !strncmp((char*)p->data, "encryption:on", p->msg.data_length)) // 현재 연결이 암호화 모드 on이고, sdbd의 암호화 모드가 on인 경우 + { + sendokmsg(sock->fd, "Encryption is ON"); + } + else if(t->encryption == ENCR_OFF && !strncmp((char*)p->data, "encryption:off", p->msg.data_length)) // 현재 연결이 암호화 모드 off이고, sdbd의 암호화 모드가 off인 경우 + { + sendokmsg(sock->fd, "Encryption is OFF"); + } + else + { + sendfailmsg(sock->fd, "Getting Encryption status failed, try encyrption on/off"); + } + local_socket_close(sock); + } + else if(p->msg.arg0 == ENCR_ON_FAIL){ // sdbd에서 암호화 모드 on에 실패했을 경우 받는 메시지 + t->encryption = ENCR_OFF; // 암호화를 on하다가 실패한 경우, 현재 연결에 대한 암호화 모드를 off + sendfailmsg(sock->fd, "Encryption ON failed"); + local_socket_close(sock); + } + else if(p->msg.arg0 == ENCR_OFF_FAIL){ // sdbd에서 암호화 모드 off에 실패했을 경우 받는 메시지 + //t->encryption = ENCR_ON; + if (sock != NULL) { + sendfailmsg(sock->fd, "Encryption OFF failed"); + local_socket_close(sock); + } + } + put_apacket(enc_p); + + } #endif put_apacket(p); @@ -1217,45 +1203,3 @@ void send_auth_publickey(atransport *t) send_packet(p, t); put_apacket(p); } - -#if 0 // daemon code (never used in sdb server) -void send_auth_request(atransport *t) -{ - D("Calling send_auth_request\n"); - apacket *p; - int ret; - - ret = adb_auth_generate_token(t->token, sizeof(t->token)); - if (ret != sizeof(t->token)) { - D("Error generating token ret=%d\n", ret); - return; - } - - p = get_apacket(); - memcpy(p->data, t->token, ret); - p->msg.command = A_AUTH; - p->msg.arg0 = ADB_AUTH_TOKEN; - p->msg.data_length = ret; - send_packet(p, t); - put_apacket(p); -} - -void adb_auth_verified(atransport *t) -{ - handle_online(t); -} - -void handle_online(atransport *t) -{ - D("adb: online\n"); - t->online = 1; -} - -void handle_offline(atransport *t) -{ - D("adb: offline\n"); - //Close the associated usb - t->online = 0; -} - -#endif