Здравствуйте, Tsnok, Вы писали:
T>Всем привет.
T>Пишу программу на д7 по обмену данными между пк и мобилкой на основе ик порта. Работаю через сокеты.
T>Набросал пример в котором инициализируется финсокет, создается сокет, и вытягивются данные о модели телефона.
T>Но вот подключться к телефону по обексу не получается.
T>Господа программеры помогите разобраться в пробеле.
Для того чтобы законнектиться по OBEX SOCKADDR_IRDA ддолжна быть.
SOCKADDR_IRDA SockAddr = {AF_IRDA, 0, 0, 0, 0, "OBEX"};
Ну и соответственно
if ((sock = socket(AF_IRDA, SOCK_STREAM,0)) == INVALID_SOCKET) return false;;
if (connect(sock, (struct sockaddr *) &SockAddr,
sizeof(SOCKADDR_IRDA)) == SOCKET_ERROR)
{
//---------------------------------------------------------------------------
// Открыть OBEX сессию. Предполагается что порт уже в двоичном режиме
//---------------------------------------------------------------------------
bool OBEX_FTP::Open(TComm *p)
{
port = p; //Предполагается что порт уже в двоичном режиме
// opcode|length |version|flag|packsize|HI|data length|data(uuid)
// 80 | 001A |10 |00 |0x2000 |46|0013 |6B01CB31410611D49A770050DA3F471F
SendBuffer[0] = OBEX_CMD_CONNECT;
*((unsigned short *)&SendBuffer[1]) = ntohs((unsigned short)0x1A);
SendBuffer[3] = OBEX_VERSION;
SendBuffer[4] = OBEX_CONNECT_FLAGS;
// Размер OBEX пакета
*((unsigned short *)&SendBuffer[5]) = ntohs((unsigned short)MAX_SEND_BUFF_LEN);
SendBuffer[7] = OBEX_HDR_TARGET; //Имя сервиса, для которого выполняется операция.
*((unsigned short *)&SendBuffer[8]) = ntohs((unsigned short)0x13); // длина заголовка
// memcpy(&SendBuffer[10], OBEX_FILE_BROWSING_UUID, 16);
memcpy(&SendBuffer[10], OBEX_SIEMENS_FILE_BROWSING_UUID, 16);
port->Purge();
port->Send(SendBuffer, 0x1A);
port->Get(RecvBuffer, 7);
if (IsSuccessResult())
{
bIsOpen = true;
packet_size = htons(*((unsigned short *)&RecvBuffer[5]));
if(packet_size > 0x0400) packet_size -= packet_size%0x0400;
recv_packet_size = htons(*((unsigned short *)&RecvBuffer[1]));
// Получить остаток учитывая что семь байт уже получено
if(recv_packet_size > 7) port->Get(RecvBuffer, recv_packet_size - 7);
return true;
}
else
{
bIsOpen = false;
return false;
}
}
... << RSDN@Home 1.1.4 stable rev. 510>>