kTransportLocal,
kTransportAny,
kTransportConnect,
- kTransportRemoteDevCon
+ //TODO REMOTE_DEVICE_CONNECT
+ //kTransportRemoteDevCon
} transport_type;
typedef struct transport TRANSPORT;
struct transport
{
LIST_NODE* node;
+ //TODO REMOTE_DEVICE_CONNECT
//list for remote sockets which wait for CNXN
- LIST_NODE* remote_cnxn_socket;
+ //LIST_NODE* remote_cnxn_socket;
int (*read_from_remote)(TRANSPORT* t, void* data, int len);
int (*write_to_remote)(PACKET *p, TRANSPORT *t);
static void unregister_all_tcp_transports();
static void connect_emulator(char* host, int port, char* buf, int buf_len);
-const unsigned int unsigned_int_bit = sizeof(unsigned int) * 8;
-const unsigned int remote_con_right_padding = ~(~0 << sizeof(unsigned int) * 4);
-const unsigned int remote_con_flag = 1 << (sizeof(unsigned int) * 8 - 1);
-unsigned int remote_con_cur_r_id = 1;
-unsigned int remote_con_cur_l_number = 0;
-const unsigned int remote_con_l_max = 16; // Ox1111
-const unsigned int remote_con_r_max = ~(~0 << (sizeof(unsigned int) * 8 - 5));
-unsigned int remote_con_l_table[16] = {0,};
+//TODO REMOTE_DEVICE_CONNECT
+//const unsigned int unsigned_int_bit = sizeof(unsigned int) * 8;
+//const unsigned int remote_con_right_padding = ~(~0 << sizeof(unsigned int) * 4);
+//const unsigned int remote_con_flag = 1 << (sizeof(unsigned int) * 8 - 1);
+//unsigned int remote_con_cur_r_id = 1;
+//unsigned int remote_con_cur_l_number = 0;
+//const unsigned int remote_con_l_max = 16; // Ox1111
+//const unsigned int remote_con_r_max = ~(~0 << (sizeof(unsigned int) * 8 - 5));
+//unsigned int remote_con_l_table[16] = {0,};
static unsigned local_socket_next_id = 1;
SDB_SOCKET* socket = data;
socket->node = NULL;
- if(HAS_SOCKET_STATUS(socket, REMOTE_CON)) {
- free(socket->read_packet);
- unsigned int id = socket->local_id & ~remote_con_flag;
-
- TRANSPORT* t = socket->transport;
- if(t != NULL) {
- LIST_NODE* node = t->remote_cnxn_socket;
- while(node != NULL) {
- SDB_SOCKET* s = node->data;
- node = node->next_ptr;
- if(s == socket) {
- remove_node(&(t->remote_cnxn_socket), s->node, no_free);
- break;
- }
- }
- }
- remote_con_l_table[id] = 0;
- }
+ //TODO REMOTE_DEVICE_CONNECT
+// if(HAS_SOCKET_STATUS(socket, REMOTE_CON)) {
+// free(socket->read_packet);
+// unsigned int id = socket->local_id & ~remote_con_flag;
+//
+// TRANSPORT* t = socket->transport;
+// if(t != NULL) {
+// LIST_NODE* node = t->remote_cnxn_socket;
+// while(node != NULL) {
+// SDB_SOCKET* s = node->data;
+// node = node->next_ptr;
+// if(s == socket) {
+// remove_node(&(t->remote_cnxn_socket), s->node, no_free);
+// break;
+// }
+// }
+// }
+// remote_con_l_table[id] = 0;
+// }
socket->local_id = 0;
free(socket);
}
PACKET *p = get_apacket();
void *x;
- if(HAS_SOCKET_STATUS(s, REMOTE_CON)) {
- x = &p->msg;
- p->ptr = &p->msg;
- }
- else {
+ //TODO REMOTE_DEVICE_CONNECT
+// if(HAS_SOCKET_STATUS(s, REMOTE_CON)) {
+// x = &p->msg;
+// p->ptr = &p->msg;
+// }
+// else {
x = p->data;
- }
+// }
size_t avail = MAX_PAYLOAD;
int r = 1;
return s;
}
-void create_remote_connection_socket(SDB_SOCKET* socket) {
- LOG_INFO("FD(%d)\n", socket->fd);
- SET_SOCKET_STATUS(socket, REMOTE_CON);
- socket->read_packet = malloc(sizeof(PACKET));
- socket->read_packet->len = 0;
-}
+//TODO REMOTE_DEVICE_CONNECT
+//void create_remote_connection_socket(SDB_SOCKET* socket) {
+// LOG_INFO("FD(%d)\n", socket->fd);
+// SET_SOCKET_STATUS(socket, REMOTE_CON);
+// socket->read_packet = malloc(sizeof(PACKET));
+// socket->read_packet->len = 0;
+//}
void connect_to_remote(SDB_SOCKET *s, const char* destination)
{
return -1;
}
-int assign_remote_connect_socket_rid (SDB_SOCKET* s) {
- if(remote_con_cur_r_id > remote_con_r_max) {
- LOG_ERROR("remote connect socket exceeds limit. cannot create remote socket for LS(%X) FD(%d)\n", s->local_id, s->fd);
- return -1;
- }
- int remote_id = (remote_con_cur_r_id << 4) | remote_con_flag;
- LOG_INFO("LS(%X) -> LS_R(%X)\n", s->local_id, remote_id);
- s->local_id = remote_id;
- remote_con_cur_r_id++;
- return 0;
-}
-
-int assign_remote_connect_socket_lid (SDB_SOCKET* s) {
- if(remote_con_cur_l_number >= remote_con_l_max) {
- LOG_ERROR("remote connect socket exceeds limit. cannot create remote socket for LS(%X) FD(%d)\n", s->local_id, s->fd);
- return -1;
- }
- int i = 0;
- for(i = 0; i< remote_con_l_max; i++) {
- if(remote_con_l_table[i] == 0) {
- unsigned int remote_id = i | remote_con_flag;
- remote_con_cur_l_number++;
- LOG_INFO("LS(%X) -> LS_L(%X)\n", s->local_id, remote_id);
- s->local_id = remote_id;
- remote_con_l_table[i] = 1;
- return 0;
- }
- }
- LOG_ERROR("not enough space in remote_con_l_table\n");
- return -1;
-}
+//TODO REMOTE_DEVICE_CONNECT
+//int assign_remote_connect_socket_rid (SDB_SOCKET* s) {
+// if(remote_con_cur_r_id > remote_con_r_max) {
+// LOG_ERROR("remote connect socket exceeds limit. cannot create remote socket for LS(%X) FD(%d)\n", s->local_id, s->fd);
+// return -1;
+// }
+// int remote_id = (remote_con_cur_r_id << 4) | remote_con_flag;
+// LOG_INFO("LS(%X) -> LS_R(%X)\n", s->local_id, remote_id);
+// s->local_id = remote_id;
+// remote_con_cur_r_id++;
+// return 0;
+//}
+
+//int assign_remote_connect_socket_lid (SDB_SOCKET* s) {
+// if(remote_con_cur_l_number >= remote_con_l_max) {
+// LOG_ERROR("remote connect socket exceeds limit. cannot create remote socket for LS(%X) FD(%d)\n", s->local_id, s->fd);
+// return -1;
+// }
+// int i = 0;
+// for(i = 0; i< remote_con_l_max; i++) {
+// if(remote_con_l_table[i] == 0) {
+// unsigned int remote_id = i | remote_con_flag;
+// remote_con_cur_l_number++;
+// LOG_INFO("LS(%X) -> LS_L(%X)\n", s->local_id, remote_id);
+// s->local_id = remote_id;
+// remote_con_l_table[i] = 1;
+// return 0;
+// }
+// }
+// LOG_ERROR("not enough space in remote_con_l_table\n");
+// return -1;
+//}
int
device_tracker_send( SDB_SOCKET* local_socket,
#define REMOVE_SOCKET_STATUS(asocket, _status) ((asocket)->status &= ~(1 << _status))
#define HAS_SOCKET_STATUS(asocket, _status) ((asocket)->status & (1 << _status))
-extern const unsigned int unsigned_int_bit;
-extern const unsigned int remote_con_right_padding;
-extern const unsigned int remote_con_flag;
-extern unsigned int remote_con_cur_r_id;
-extern unsigned int remote_con_cur_l_number;
-extern const unsigned int remote_con_l_max; // Ox1111
-extern const unsigned int remote_con_r_max;
-extern unsigned int remote_con_l_table[16];
+//TODO REMOTE_DEVICE_CONNECT
+//extern const unsigned int unsigned_int_bit;
+//extern const unsigned int remote_con_right_padding;
+//extern const unsigned int remote_con_flag;
+//extern unsigned int remote_con_cur_r_id;
+//extern unsigned int remote_con_cur_l_number;
+//extern const unsigned int remote_con_l_max; // Ox1111
+//extern const unsigned int remote_con_r_max;
+//extern unsigned int remote_con_l_table[16];
typedef enum {
NOTIFY = 0,
DEVICE_TRACKER,
REMOTE_SOCKET,
- REMOTE_CON,
+ //TODO REMOTE_DEVICE_CONNECT
+// REMOTE_CON,
QEMU_SOCKET
} SOCKET_STATUS;
void local_socket_close(SDB_SOCKET *s);
SDB_SOCKET *create_local_socket(int fd);
void connect_to_remote(SDB_SOCKET *s, const char* destination);
-int assign_remote_connect_socket_rid (SDB_SOCKET* s);
+//TODO REMOTE_DEVICE_CONNECT
+//int assign_remote_connect_socket_rid (SDB_SOCKET* s);
int device_tracker_send( SDB_SOCKET* local_socket, const char* buffer, int len );
#endif /* SOCKETS_H_ */
}
}
-static unsigned int decoding_to_remote_ls_id(unsigned int encoded_ls_id) {
- unsigned int remote_ls_id = encoded_ls_id & ~15;
- return remote_ls_id;
-}
-
-static unsigned int decoding_to_local_ls_id(unsigned encoded_ls_id) {
- unsigned int local_ls_id = encoded_ls_id & 15;
- local_ls_id |= remote_con_flag;
- return local_ls_id;
-}
+//TODO REMOTE_DEVICE_CONNECT
+//static unsigned int decoding_to_remote_ls_id(unsigned int encoded_ls_id) {
+// unsigned int remote_ls_id = encoded_ls_id & ~15;
+// return remote_ls_id;
+//}
+//
+//static unsigned int decoding_to_local_ls_id(unsigned encoded_ls_id) {
+// unsigned int local_ls_id = encoded_ls_id & 15;
+// local_ls_id |= remote_con_flag;
+// return local_ls_id;
+//}
void wakeup_select_func(int _fd, unsigned ev, void *data) {
T_PACKET* t_packet = NULL;
unsigned int local_id = p->msg.arg1;
unsigned int remote_id = p->msg.arg0;
SDB_SOCKET* sock = NULL;
+
+ //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) {
t->sdb_port = port;
t->suspended = 0;
t->type = ttype;
- t->remote_cnxn_socket = NULL;
+ //TODO REMOTE_DEVICE_CONNECT
+// t->remote_cnxn_socket = NULL;
if(host) {
snprintf(t->host, 20, "%s", host);
if(serial) {
t->serial = strdup(serial);
}
- t->remote_cnxn_socket = NULL;
+ //TODO REMOTE_DEVICE_CONNECT
+// t->remote_cnxn_socket = NULL;
register_transport(t);
/* tizen specific */