Re: не коннектится OBEX
От: kiborg Россия  
Дата: 02.11.05 08:27
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.