Enviando mensajes de WhatsApp

softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Enviando mensajes de WhatsApp

Post by softruz »

En ese caso el imei es todo ceros, si en un AVD (emulador) de la API de Google pones *#06# (codigo para objeter el imei), te retorna todos ceros.

Un Saludo.
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Enviando mensajes de WhatsApp

Post by FiveWiDi »

softruz wrote:En ese caso el imei es todo ceros, si en un AVD (emulador) de la API de Google pones *#06# (codigo para objeter el imei), te retorna todos ceros.

Un Saludo.
Gracias softruz,

En mi caso con el emulador de Android YouWave el IMEI que obtengo no son ceros, sino una cadena de cifras y letras en mayúsculas i minúsculas de 14 posiciones, cuando el IMEI del SIM normal es de 15 posiciones (si no estoy equivocado).

Ni con IMEI de ceros ni con el que obtengo con *#06# en el emulador, ni con el IMEI real del SIM consigo enviar nada desde estas rutinas, pero si funciona desde el Emulador.

Estoy triste y en un punto muerto, no se que màs probar.

Aun así gracias.
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
jll-fwh
Posts: 385
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia
Contact:

Re: Enviando mensajes de WhatsApp

Post by jll-fwh »

Hola FiveWiDi:

Con la última actualización de la clase HB_WhatsApp que publico aquí Antonio en este mismo hilo, con las pruebas que yo estuve haciendo funciona perfectamente.

Deberías de publicar el código que estas usando para ver donde tienes el problema.

Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 3.1.1 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA + OURXDBU -
S.O: XP / Win 7
Blog: http://javierlloris.blogspot.com.es/
e-mail: jllorispersonal@gmail.com
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Enviando mensajes de WhatsApp

Post by FiveWiDi »

jll-fwh wrote:Hola FiveWiDi:

Con la última actualización de la clase HB_WhatsApp que publico aquí Antonio en este mismo hilo, con las pruebas que yo estuve haciendo funciona perfectamente.

Deberías de publicar el código que estas usando para ver donde tienes el problema.

Un saludo
JLL
Gracias por el interés,

Aquí pongo el código que estoy utilizando, con él consigo conectarme pero no el Login y claro está hace la acción de enviar pero nadie lo recibe; estoy utilizando un número de teléfono y su SIM registrado en un Android:

Code: Select all

#include "FiveWin.ch"
#include "hbsocket.ch"

//function Main()
FUNCTION lEnvioWhatsapp( cPais, cNumtel, cIMEI, cNick, cTeldestino, cMensaje )

STATIC oWA := Nil
                                                                   
    //Traza( 1, "cpais + cnumtel=", cpais + cnumtel )
    //Traza( 1, "cIMEI=", cIMEI )

    If .Not. IsInternet()
        ? Gettrad( "No hay conexión a internet." )
        Return .F.
    EndIf
    
    If oWA = Nil
        oWA := HB_WhatsApp():New( cpais + cnumtel, hb_md5( StrRev( cIMEI ) ), cNick )
        ? "Connect:", oWA:Connect()
        ? "Login:", oWA:Login()     
    EndIf

    //? "Datos:", oWA:cAccount_status, oWA:cAccount_kind, oWA:cAccount_creation, oWA:cAccount_expiration
    //oWA:Suscribe( "34644109030" )
    //? "Datosb:", oWA:cAccount_status, oWA:cAccount_kind, oWA:cAccount_creation, oWA:cAccount_expiration
    //oWA:Message( Str( TS2Num() ), "34670463032", "Harbour power!!!" )

    /* ************************************************************* */
    oWA:Message( Str( TS2Num() ), cPais + cTeldestino, cMensaje )
    //Traza( 1, "Envío WhatsApp a: ", cTeldestino )
    /* ************************************************************* */

return .T.


CLASS HB_WhatsApp

   DATA  cAccount_status, cAccount_kind, cAccount_creation, cAccount_expiration
   DATA  cNumber, cPassword, cNickname
   DATA  pSocket
   DATA  cServer INIT "s.whatsapp.net"
   DATA  cHost   INIT "bin-short.whatsapp.net"
   DATA  cRealm  INIT "s.whatsapp.net"
   DATA  nPort   INIT 5222
   DATA  cIP
   DATA  cQop    INIT "auth"
   DATA  cDigest_Uri INIT "xmpp/s.whatsapp.net"
   DATA  aResArray
   DATA  cMsg
   DATA  _Incomplete_message
   DATA  LastSeen

   METHOD New( cNumber, cPassword, cNickname )
   METHOD Connect()
   METHOD Login()
   METHOD Message( cMmsgid, cTo, cTxt )
   METHOD Read()
   METHOD Send( cData )
   METHOD parse_last_seen( cMsg )
   METHOD parse_received_message( cMsg )
   METHOD RequestLastSeen( mobile )

   METHOD _Authenticate( cNonce, cNC )
   METHOD _Identify( cStr )
   METHOD _Is_Full_Msg( cStr )
   METHOD parse_account_info( msg )

   DESTRUCTOR Destroy()

ENDCLASS

METHOD New( cNumber, cPassword, cNickname ) CLASS HB_WhatsApp

   ::cIP = hb_socketGetHosts( ::cHost )[ 1 ]
   ::pSocket = hb_socketOpen()

   ::cNumber   = cNumber
   ::cPassword = cPassword
   ::cNickname = cNickname

return self

METHOD Connect() CLASS HB_WhatsApp

return hb_socketConnect( ::pSocket, { HB_SOCKET_AF_INET, ::cIP, ::nPort } )

static function StrToHex( cStr )

   local n, cHex := "" 
   
   for n = 1 to Len( cStr )
      cHex += "0x" + PadL( hb_NumToHex( Asc( SubStr( cStr, n, 1 ) ) ), "0", 2 )
      if n < Len( cStr )
         cHex += ", "
      endif   
   next
   
return cHex         

static function random_uuid()

return hb_strformat( "%04x%04x-%04x-%04x-%04x-%04x%04x%04x",;
                     hb_Random( 0, 0xffff ), hb_Random( 0, 0xffff ),;
                     hb_Random( 0, 0xffff ),;
                     hb_BitOr( hb_Random( 0, 0x0fff ), 0x4000 ),;
                     hb_BitOr( hb_Random( 0, 0x3fff ), 0x8000 ),;
                     hb_Random( 0, 0xffff ), hb_Random( 0, 0xffff ), hb_Random( 0, 0xffff ) )
              
METHOD Login() CLASS HB_WhatsApp

   local cBuffer, cResponse, aArrResponse, hAuthData, cValue, aResData, cResData

   ::Send( "WA" + Chr( 0x01 ) + Chr( 0 ) + Chr( 0 ) + ;
             Chr( 0x19 ) + Chr( 0xF8 ) + Chr( 0x05 ) + Chr( 0x01 ) + ;
             Chr( 0xA0 ) + Chr( 0x8A ) + Chr( 0x84 ) + Chr( 0xFC ) + ;
             Chr( 0x11 ) + "iPhone-2.6.9-5222" + ;
             Chr( 0 ) + Chr( 0x08 ) + Chr( 0xF8 ) + Chr( 0x02 ) + ;
             Chr( 0x96 ) + Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0xF8 ) + ;
             Chr( 0x01 ) + Chr( 0x7E ) + Chr( 0 ) + Chr( 0x07 ) + Chr( 0xF8 ) + ;
             Chr( 0x05 ) + Chr( 0x0F ) + Chr( 0x5A ) + Chr( 0x2A ) + ;
             Chr( 0xBD ) + Chr( 0xA7 ) )

/* ::Send( "WA" + Chr( 0x01 ) + Chr( 0 ) + Chr( 0 ) + ;
             Chr( 0x19 ) + Chr( 0xF8 ) + Chr( 0x05 ) + Chr( 0x01 ) + ;
             Chr( 0xA0 ) + Chr( 0x8A ) + Chr( 0x84 ) + Chr( 0xFC ) + ;
             Chr( 0x0C ) + "i9988_custom" + ;
             Chr( 0 ) + Chr( 0x08 ) + Chr( 0xF8 ) + Chr( 0x02 ) + ;
             Chr( 0x96 ) + Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0xF8 ) + ;
             Chr( 0x01 ) + Chr( 0x7E ) + Chr( 0 ) + Chr( 0x07 ) + Chr( 0xF8 ) + ;
             Chr( 0x05 ) + Chr( 0x0F ) + Chr( 0x5A ) + Chr( 0x2A ) + ;
             Chr( 0xBD ) + Chr( 0xA7 ) )
             */

   cBuffer = ::Read()
   cResponse = hb_base64decode( SubStr( cBuffer, 27 ) )
   aArrResponse = HB_ATokens( cResponse, "," )
   hAuthData = {=>}
   
   for each cValue in aArrResponse
      aResData = hb_ATokens( cValue, "=" )
      hAuthData[ aResData[ 1 ] ] = StrTran( aResData[ 2 ], '"', "" )
   next    
   
   cResData = ::_Authenticate( hAuthData[ "nonce" ] ) 
   cResponse = Chr( 0x01 ) + Chr( 0x31 ) + Chr( 0xF8 ) + Chr( 0x04 ) + Chr( 0x86 ) + ;
               Chr( 0xBD ) + Chr( 0xA7 ) + Chr( 0xFD ) + Chr( 0 ) + Chr( 1 ) + Chr( 0x28 ) + ;
               hb_base64encode( cResData )
   ::Send( cResponse )
   cBuffer = ::Read()
   ::Read()
   cResponse = Chr( 0 ) + Chr( 8 + Len( ::cNickname ) ) + Chr( 0xF8 ) + Chr( 5 ) + Chr( 0x74 ) + ;
               Chr( 0xA2 ) + Chr( 0xA3 ) + Chr( 0x61 ) + Chr( 0xFC ) + Chr( Len( ::cNickName ) ) + ;
               ::cNickName + Chr( 0 ) + Chr( 0x15 ) + Chr( 0xF8 ) + Chr( 6 ) + Chr( 0x48 ) + ;
               Chr( 0x43 ) + Chr( 5 ) + Chr( 0xA2 ) + Chr( 0x3A ) + Chr( 0xF8 ) + Chr( 1 ) + ;
               Chr( 0xF8 ) + Chr( 4 ) + Chr( 0x7B ) + Chr( 0xBD ) + Chr( 0x4D ) + Chr( 0xF8 ) + ;
               Chr( 1 ) + Chr( 0xF8 ) + Chr( 3 ) + Chr( 0x55 ) + Chr( 0x61 ) + Chr( 0x24 ) + ;
               Chr( 0 ) + Chr( 0x12 ) + Chr( 0xF8 ) + Chr( 8 ) + Chr( 0x48 ) + Chr( 0x43 ) + ;
               Chr( 0xFC ) + Chr( 1 ) + Chr( 0x32 ) + Chr( 0xA2 ) + Chr( 0x3A ) + Chr( 0xA0 ) + ;
               Chr( 0x8A ) + Chr( 0xF8 ) + Chr( 1 ) + Chr( 0xF8 ) + Chr( 3 ) + Chr( 0x1F ) + ;
               Chr( 0xBD ) + Chr( 0xB1 )
   ::Send( cResponse )
   ::Read()    
   
return nil

METHOD _Authenticate( cNonce, cNC ) CLASS HB_WhatsApp

   local cCNonce := random_uuid()
   local cA1 := hb_StrFormat( "%s:%s:%s", ::cNumber, ::cServer, ::cPassword )
   local cA2, cPassword

   if cNC == nil
      cNC = "00000001"
   endif
   
   cA1 = pack_h32( hb_md5( cA1 ) ) + ":" + cNonce + ":" + cCNonce   
   cA2 = "AUTHENTICATE:" + ::cDigest_Uri
   cPassword = hb_md5( cA1 ) + ":" + cNonce + ":" + cNC + ":" + cCNonce + ":" + ::cQop + ;
               ":" + hb_md5( cA2 )
   cPassword = hb_md5( cPassword )            
   
return hb_StrFormat( 'username="%s",realm="%s",nonce="%s",cnonce="%s",nc=%s,qop=%s,digest-uri="%s",response=%s,charset=utf-8',;
                     ::cNumber, ::cRealm, cNonce, cCnonce, cNC, ::cQop, ::cDigest_Uri, cPassword )   
 
METHOD Message( cMsgid, cTo, cTxt ) CLASS HB_WhatsApp

   local lLong_txt_bool := isShort( cTxt )
   local cStream , cMsg, cContent, cTxt_length
   local cTo_length
   local cMsgid_length
   local cTotal_length
   
   cTo_length = Chr( Len( cTo ) )
   cMsgid_length = Chr( Len( cMsgid ) )
   cTxt_length = Chr( Len( cTxt ) )
   
   cContent = Chr( 0xF8 ) + Chr( 0x08 ) + Chr( 0x5D ) + Chr( 0xA0 ) + Chr( 0xFA ) + Chr( 0xFC ) + cTo_length
   cContent += cTo
   cContent += Chr( 0x8A ) + Chr( 0xA2 ) + Chr( 0x1B ) + Chr( 0x43 ) + Chr( 0xFC ) + cMsgid_length
   cContent += cMsgid
   cContent += Chr( 0xF8 ) + Chr( 0x02 ) + Chr( 0xF8 ) + Chr( 0x04 ) + Chr( 0xBA ) + Chr( 0xBD ) + Chr( 0x4F) + ;
               Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0x8C ) + Chr( 0xF8 ) + Chr( 0x02 ) + Chr( 0x16 )

   if ! lLong_txt_bool
      cContent += Chr( 0xFD ) + Chr( 0 ) + cTxt_length
   else
      cContent += Chr( 0xFC ) + cTxt_length
   endif
  
   cContent += cTxt
 
   cTotal_length = Chr( Len( cContent ) )
   
   if Len( cTotal_length ) == 1
      cTotal_length = Chr( 0 ) + cTotal_length
   endif
    
   cMsg := cTotal_length + cContent 
   
   cStream := ::Send( cMsg )
   ::Read()
   //::Read()
   //::Read()
        
Return nil
 
METHOD parse_received_message( cMsg ) CLASS HB_WhatsApp

   local message := { => }, nLength

   // RCVD MSG IN STRING 
   nLength = Asc( SubStr( cMsg, 1, 1 ) )
   message[ 'length' ] = nLength  // PACKET EXCLUDING 00 AND FIRST HEX SHOULD EQUAL THIS NUMBER
   
   cMsg = SubStr( cMsg, 3 )       // Remove Length & F8
   message[ 'sec_length' ] = Asc( SubStr( cMsg, 1, 1 ) )       // Length of something i dont know excatly what  
   cMsg = SubStr( cMsg, 6 )       // Remove Second Length ( 1 HEX ) , Remove XML Chrs ( 4 HEX )
   message[ 'from_number_length' ] = Asc( SubStr( cMsg, 1, 1 ) )
   
   cMsg = SubStr( cMsg, 2 )       // Remove Length
   message[ 'from_number' ] = SubStr( cMsg, 1, message[ 'from_number_length' ] )
   
   cMsg = SubStr( cMsg, message[ 'from_number_length' ] + 1 )             // Remove NUMBER
   cMsg = SubStr( cMsg,4 )       // Remove F8 & XML ( 2 HEX )
   message[ 'message_id_length' ] = Asc( SubStr( cMsg, 1, 1 ) )
   cMsg = Substr( cMsg, 2 )       // Remove Length
   message[ 'message_id' ] = SubStr( cMsg, 1, message[ 'message_id_length' ] )
   cMsg = SubStr( cMsg, message[ 'message_id_length' ] + 1 )
   cMsg = SubStr( cMsg, 5 )       // Remove XML ( 4 HEX )
   message[ 'timestamp_length' ] = Asc( SubStr( cMsg, 1, 1 ) )
   cMsg = SubStr( cMsg, 2 )       // Remove Length
   message[ 'timestamp' ] = Num2TS( Val( SubStr( cMsg, 1, message[ 'timestamp_length' ] ) ) )
   
   cmsg = SubStr( cMsg, message[ 'timestamp_length' ] + 1 )               // Remove Timestamp
   // Check for Retry header 
   if Substr( cMsg, 1, 1 ) == Chr( 0x88 )
      cMsg = SubStr( cMsg, 5 )       // Remove Retry Length , i dont think i will need it
   endif
   
   cmsg = Substr( cMsg, 10 )      // Remove XMPP XML and Name XML Headers 
   message[ 'sender_name_length' ] = Asc( SubStr( cMsg, 1, 1 ) )
   cmsg = SubStr( cMsg, 2 )       // Remove Length
   message[ 'sender_name' ] = SubStr( cMsg, 1, message[ 'sender_name_length' ] )
   
   cMsg = SubStr( cMsg, message[ 'sender_name_length' ] + 1 )   // Remove sender from msg
   cMsg = SubStr( cMsg, 10 )      // Remove body headers
   message[ 'body_txt_length' ] = Asc( SubStr( cMsg, 1, 1 ) )

   cMsg = SubStr( cMsg, 2 )       // Remove Length
   message[ 'body_txt' ] = SubStr( cMsg, 1, message[ 'body_txt_length' ] )

   cMsg = SubStr( cMsg, message[ 'body_txt_length' ] + 1 )  // Remove body txt
   cMsg = SubStr( cMsg, 10 )      // Remove XMPP XML and Name XML Headers 
   message[ 'time_length' ] = Asc( SubStr( cMsg, 1, 1 ) )

   cMsg = SubStr( cMsg, 2 )       // Remove Length
   message[ 'time' ] = SubStr( cMsg, 1, message[ 'time_length' ] )         
   cMsg = SubStr( cMsg, message[ 'time_length' ] + 1 )

   ? "From: " + message[ 'sender_name' ] + CRLF + ;
     "msg:  " + message[ 'body_txt' ] + CRLF + ;
     "date: " + message[ 'timestamp' ]
   
return message
               
METHOD Read() CLASS HB_WhatsApp

   local cBuffer := Space( 1024 ), cV, cRcvdType
   local nLen := hb_socketRecv( ::pSocket, @cBuffer )

   cBuffer = SubStr( cBuffer, 1, nLen )
   ::aResArray = HB_ATokens( cBuffer, Chr( 0 ) )
   // ? StrToHex( cBuffer )
   
   for each cV in ::aResArray 
      cRcvdType = ::_Identify( cV ) 

      //? cRcvdType
      //? StrToHex( cV )

      do case
         case cRcvdType == "incomplete_msg"
              ::_incomplete_message = cV

         case cRcvdType == "msg"
              ::cMsg = ::parse_received_message( cV )
         
         case cRcvdType == "account_info"
              ::parse_account_info( cV )

         case cRcvdType == "last_seen"
              ::lastseen = ::parse_last_seen( cV )
      endcase
   next

return cBuffer
    
METHOD parse_account_info( cMsg )

   local nAcst, nActkind
   local x := { => }
   local nCreation_timstamp_len, nExpr_length
   
    cMsg = SubStr( cMsg, 4 )        // Remove Length,F8,second length
    cMsg = SubStr( cMsg, 5 )        // Remove Success XML
    // Next should be status
    nAcst = Asc( SubStr( cMsg, 1, 1 ) ) 
    if nAcst == 0x09
       ::cAccount_status = 'active'
    else
       ::cAccount_status = 'inactive'
    endif
    cMsg = SubStr( cMsg, 3 )        // Remove status & KIND XML
    nActkind = Asc( SubStr( cMsg, 1, 1 ) )
    if nActkind == 0x37
       ::cAccount_kind = 'free'
    else 
       ::cAccount_kind = 'paid'
    endif
    cMsg = SubStr( cMsg, 4 )        // Remove XML
    nCreation_timstamp_len = Asc( SubStr( cMsg, 1, 1 ) ) // Should return 10 for the next few thousdands years
    cMsg = SubStr( cMsg, 2 )        // Remove Length
    ::cAccount_creation := Num2TS( Val( SubStr( cMsg, 1, nCreation_timstamp_len ) ) )
    cMsg = SubStr( cMsg, nCreation_timstamp_len + 1 )       // Remove Timestamp
    cMsg = SubStr( cMsg, 3 )        // Remove Expiration XML
    nExpr_length = Asc( SubStr( cMsg, 1, 1 ) ) // Should also be 10
    cMsg = SubStr( cMsg, 2 )        // Remove Length
    ::cAccount_expiration := Num2TS( Val( SubStr( cMsg, 1, nExpr_length ) ) )

return nil

METHOD RequestLastSeen( mobile ) CLASS HB_WhatsApp

   local mob_len, content, len, total_length, request, stream

   mob_len = Chr( Len( mobile ) )
   content = Chr( 0xF8 ) + Chr( 0x08 ) + Chr( 0x48 ) + Chr( 0x43 ) + Chr( 0xFC )
   content += Chr( 0x01 ) + Chr( 0x37 ) + Chr( 0xA2 ) + Chr( 0x3A ) + Chr( 0xA0 )
   content += Chr( 0xFA ) + Chr( 0xFC ) + mob_len
   content += mobile
   content += Chr( 0x8A ) + Chr( 0xF8 ) + Chr( 0x01 ) + Chr( 0xF8 ) + Chr( 0x03 )
   content += Chr( 0x7B ) + Chr( 0xBD ) + Chr( 0x4C )

   len = Len( content )
   total_length = Chr( len )

   request = Chr( 0 )
   request += total_length
   request += content
   stream  = ::Send( request )
   ::Read()
   ::Read()

return nil

METHOD parse_last_seen( cMsg ) CLASS HB_WhatsApp

   Local lastseen := {=>}, moblen, last_seen_len

   cMsg = SubStr( cMsg, 8 )  // Remove Some XML DATA
   moblen= Asc( SubStr( cMsg, 1, 1 ) )
   cMsg = SubStr( cMsg, 2 )  // Remove Length
   lastseen[ 'mobile' ] = SubStr( cMsg, 1, moblen )
   cMsg = SubStr( cMsg, moblen + 1 )
   cMsg = SubStr( cMsg, 17 ) // Remove Some More XML DATA
   last_seen_len = Asc( SubStr( cMsg, 1, 1 ) ) 
   cmsg = SubStr( cMsg, 2 )  // Remove Length
   lastseen[ 'seconds_ago' ] = SubStr( cMsg, 0, last_seen_len )

return lastseen

METHOD Send( cData ) CLASS HB_WhatsApp

return hb_socketSend( ::pSocket, cData )

static function StartsWith( cStr, cCompare, nPos )

return SubStr( cStr, nPos, Len( cCompare ) ) == cCompare

static function EndsWith( cStr, cCompare )

return Right( cStr, Len( cCompare ) ) == cCompare

METHOD _Identify( cStr ) CLASS HB_WhatsApp

   local cMsg_identifier := Chr( 0x5D ) + Chr( 0x38 ) + Chr( 0xFA ) + Chr( 0xFC ) 
   local cServer_delivery_identifier := Chr( 0x8C ) 
   local cClient_delivery_identifier := Chr( 0x7F ) + Chr( 0xBD ) + Chr( 0xAD )
   local cAcc_info_iden := Chr( 0x99 ) + Chr( 0xBD ) + Chr( 0xA7 ) + Chr( 0x94 )    
   local cLast_seen_ident := Chr( 0x48 ) + Chr( 0x38 ) + Chr( 0xFA ) + Chr( 0xFC )
   local cLast_seen_ident2 := Chr( 0x7B ) + Chr( 0xBD ) + Chr( 0x4C ) + Chr( 0x8B )
   
   if ! ::_is_full_msg( cStr )
      return "incomplete_msg"

   elseif StartsWith( cStr, cMsg_identifier, 4 )

      if EndsWith( cStr, cServer_delivery_identifier )
         return "server_delivery_report"

      elseif EndsWith( cStr, cClient_delivery_identifier ) 
         return "client_delivery_report"

      else
         return "msg"

      endif 

   elseif StartsWith( cStr, cAcc_info_iden, 4 )
      return "account_info"

   elseif StartsWith( cStr, cLast_seen_ident, 4 ) .and. cLast_seen_ident2 $ cStr
      return "last_seen"
   
   else
      return "other"

   endif

return nil

METHOD _Is_Full_Msg( cStr ) CLASS HB_WhatsApp

return Len( cStr ) == Asc( Left( cStr, 1 ) ) + 1

METHOD Destroy() CLASS HB_WhatsApp

   HB_SocketShutDown( ::pSocket )
   HB_SocketClose( ::pSocket )

   ::pSocket = nil

return nil

static function pack_h32( cString )
   
   local c := "", cLeter
   local nibbleshift := 4
   local n
   local nPos   := 0
   local aOut   := {}

   for each cLeter in cString
      n = asc( cLeter )
      if n >= asc( "0" ) .and. n <= asc( "9" )
         n -= asc( "0" )
      elseif n >= asc( "a" ) .and. n <= asc( "f" )
         n -= ( asc( "a" ) - 10 )
      elseif n >= asc( "F" ) .and. n <= asc( "F" )
         n -= ( asc( "A" ) - 10 )
      endif
      
      if cLeter:__enumindex() % 2 != 0
         AAdd( aOut, 0 )         
         nPos++
      endif
      
        aOut[ nPos ] = hb_BitOr( aOut[ nPos ], hb_BitShift( n, nibbleshift ) )
      
      nibbleshift = hb_BitAnd( ( nibbleshift + 4 ), 7 )

      if cLeter:__enumindex() % 2 == 0
         c += Chr( aOut[ nPos ] )
      endif      
      
   next

return c 

static function  Num2Days( timet )

return  (timet) / (24.0 * 60.0 * 60.0)

static function  Num2TS( n )
   local fecha, hour, min, sec, time, datetime
   local t2d := Num2Days( n )
   
   fecha = Num2Date( n )
   hour  = ( t2d - int( t2d ) ) * 24
   min   = ( hour - int( hour ) ) * 60
   sec   = ( min - int( min ) ) * 60
   time  = strzero( int( hour ), 2 ) + strzero( int( min ), 2 ) + strzero( int( sec ), 2 )
   datetime = dtos( fecha ) + time
   
return hb_tstostr( hb_stot( datetime ) )

static function Num2Date( n )

   local fecha
   local t2d := Num2Days( n )
   
   fecha := SToD( "19700101" ) + int( t2d )
   
return fecha

static function TS2Num( dt )

   local fecha   
   local nNum
   
   DEFAULT dt := hb_DateTime()
   
   nNum = ( hb_Hour( dt ) * 24 + hb_Minute( dt ) * 60 + hb_sec( dt ) * 60 ) / 86400
      
   nNum += ( hb_TToD( dt ) - SToD( "19700101" ) )
   
   nNum *= 86400 
   
   nNum = Int( nNum )
   
return nNum

static function isShort( str )

return Len( str ) < 256

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STRREV )
{
   int iLen = hb_parclen( 1 ), i;
   char * buffer = ( char * ) hb_xgrab( iLen );
   
   for( i = 0; i < iLen; i++ )
      buffer[ i ] = hb_parc( 1 )[ iLen - i - 1 ];
      
   hb_retclen( buffer, iLen );
   hb_xfree( buffer );
}

#pragma ENDDUMP      
 
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Enviando mensajes de WhatsApp

Post by Antonio Linares »

Carlos,

El IMEI lo toma automaticamente el WhatsApp para identificar al que usa la aplicación ya que el IMEI es un valor único, que otros usuarios tienen distinto.

No tienes un telefono real con Android en donde tengas registrado WhatsApp y asi probar con sus datos ? A mi me funciona bien
regards, saludos

Antonio Linares
www.fivetechsoft.com
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Enviando mensajes de WhatsApp

Post by softruz »

Antonio muy buenas, ¿podeis poner la última clase de HB_Whatsapp para así poder probarla? con las que tengo no lo consigo.

Tambien comentaros que yo he realizado una aplicación en Five, que recibe whatsapp en tiempo real, pero está enlazado con el telefono directamente por USB o por Wifi, cuando tenga una versión para mandar mensajes la publico.

Un Saludo.
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Enviando mensajes de WhatsApp

Post by FiveWiDi »

Antonio Linares wrote:Carlos,

El IMEI lo toma automaticamente el WhatsApp para identificar al que usa la aplicación ya que el IMEI es un valor único, que otros usuarios tienen distinto.

No tienes un telefono real con Android en donde tengas registrado WhatsApp y asi probar con sus datos ? A mi me funciona bien
Gracias Antonio

Lo he probado con el número de teléfono i IMEI de un familiar que tiene WhatsApp en un aparato HTC, tanto con su aparato apagado como encendido y conectado.

Tambien lo he probado con un número diferente de teléfono REAL registrado en WhatsApp desde el emulador YouWave, e intentando enviar mensajes usando el IMEI real del SIM, o usando un IMEI de 15 ceros, o usando el IMEI que responde YouWave al enviar *#06#.

Creo que una vez (ya empiezo a dudar si recibieron mi mensaje u otro), conseguí enviar un mensaje con el número de teléfono del familiar.

Una duda, cuando se encripta el password, es lo mismo si recibe un valor fijo (ej. "629210458" ) que una variable (ej. cTelDestino ) con ese valor? (desde aquí no puedo probarlo y ya no se que pensar)

Gracias de todos modos.
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
lucasdebeltran
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am
Contact:

Re: Enviando mensajes de WhatsApp

Post by lucasdebeltran »

Antonio,

Creo que esto es de interés:
http://bandaancha.eu/foros/tu-contrasen ... ei-1697483
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Enviando mensajes de WhatsApp

Post by mastintin »

lucasdebeltran wrote:Antonio,

Creo que esto es de interés:
http://bandaancha.eu/foros/tu-contrasen ... ei-1697483
Esto es cierto en el caso de telefonos android y de hecho es lo que hace el codigo de esta clase.
El problema es cuando el telefono usado para dar de alta el servicio de whatsapp es un iphone ( por ejemplo ) donde esa informacion no es el MD5 de EMEI al reves sino otra "cosa" que aun no ha sido descifrada . DE todas formas gracias por la info , es bueno estar atento a cualquier cambio o avance en el tema.
Saludos.
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Enviando mensajes de WhatsApp

Post by JmGarcia »

No encuentro hbsocket.ch

Error F0029 Can't open #include file: 'hbsocket.ch'
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Enviando mensajes de WhatsApp

Post by JmGarcia »

Despues de encontrar el hbsocket.ch en http://www.sitasoft.net/dolphinosx/harb ... bsocket.ch que supongo que estará bien.

Me da estos errores:
Error: Unresolved external '_HB_FUN_HB_SOCKETGETHOSTS' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETOPEN' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETCONNECT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_NUMTOHEX' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_STRFORMAT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_BASE64DECODE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_BASE64ENCODE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETRECV' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETSEND' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETSHUTDOWN' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETCLOSE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_TSTOSTR' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_STOT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_DATETIME' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_HOUR' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_MINUTE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SEC' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_TTOD' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ


¿ Que librería me falta ?
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Enviando mensajes de WhatsApp

Post by Antonio Linares »

JM,

Este es el hbsocket.ch correcto:

Code: Select all

/*
 * $Id: hbsocket.ch 14738 2010-06-10 17:30:22Z vszakats $
 */

/*
 * Harbour Project source code:
 *    socket related constant values
 *
 * Copyright 2009 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
 * www - http://harbour-project.org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this software; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
 *
 * As a special exception, the Harbour Project gives permission for
 * additional uses of the text contained in its release of Harbour.
 *
 * The exception is that, if you link the Harbour libraries with other
 * files to produce an executable, this does not by itself cause the
 * resulting executable to be covered by the GNU General Public License.
 * Your use of that executable is in no way restricted on account of
 * linking the Harbour library code into it.
 *
 * This exception does not however invalidate any other reasons why
 * the executable file might be covered by the GNU General Public License.
 *
 * This exception applies only to the code released by the Harbour
 * Project under the name Harbour.  If you copy code from other
 * Harbour Project or Free Software Foundation releases into a copy of
 * Harbour, as the General Public License permits, the exception does
 * not apply to the code that you add in this way.  To avoid misleading
 * anyone as to the status of such modified files, you must delete
 * this exception notice from them.
 *
 * If you write modifications of your own for Harbour, it is your choice
 * whether to permit this exception to apply to your modifications.
 * If you do not wish that, delete this exception notice.
 *
 */

/* NOTE: This file is also used by C code. */

#ifndef HB_SOCKET_CH_
#define HB_SOCKET_CH_

/* Harbour socket error codes */
#define HB_SOCKET_ERR_PIPE                1
#define HB_SOCKET_ERR_TIMEOUT             2
#define HB_SOCKET_ERR_WRONGADDR           3
#define HB_SOCKET_ERR_AFNOSUPPORT         4
#define HB_SOCKET_ERR_PFNOSUPPORT         5
#define HB_SOCKET_ERR_PROTONOSUPPORT      6
#define HB_SOCKET_ERR_PARAMVALUE          7
#define HB_SOCKET_ERR_NOSUPPORT           8
#define HB_SOCKET_ERR_NORESOURCE          9
#define HB_SOCKET_ERR_ACCESS              10
#define HB_SOCKET_ERR_ADDRINUSE           11
#define HB_SOCKET_ERR_INTERRUPT           12
#define HB_SOCKET_ERR_ALREADYCONNECTED    13
#define HB_SOCKET_ERR_CONNREFUSED         14
#define HB_SOCKET_ERR_CONNABORTED         15
#define HB_SOCKET_ERR_CONNRESET           16
#define HB_SOCKET_ERR_NETUNREACH          17
#define HB_SOCKET_ERR_NETDOWN             18
#define HB_SOCKET_ERR_NETRESET            19
#define HB_SOCKET_ERR_INPROGRESS          20
#define HB_SOCKET_ERR_ALREADY             21
#define HB_SOCKET_ERR_ADDRNOTAVAIL        22
#define HB_SOCKET_ERR_READONLY            23
#define HB_SOCKET_ERR_AGAIN               24
#define HB_SOCKET_ERR_INVALIDHANDLE       25
#define HB_SOCKET_ERR_INVAL               26
#define HB_SOCKET_ERR_PROTO               27
#define HB_SOCKET_ERR_PROTOTYPE           28
#define HB_SOCKET_ERR_NOFILE              29
#define HB_SOCKET_ERR_NOBUFS              30
#define HB_SOCKET_ERR_NOMEM               31
#define HB_SOCKET_ERR_FAULT               32
#define HB_SOCKET_ERR_NAMETOOLONG         33
#define HB_SOCKET_ERR_NOENT               34
#define HB_SOCKET_ERR_NOTDIR              35
#define HB_SOCKET_ERR_LOOP                36
#define HB_SOCKET_ERR_MSGSIZE             37
#define HB_SOCKET_ERR_DESTADDRREQ         38
#define HB_SOCKET_ERR_NOPROTOOPT          39
#define HB_SOCKET_ERR_NOTCONN             40
#define HB_SOCKET_ERR_SHUTDOWN            41
#define HB_SOCKET_ERR_TOOMANYREFS         42
#define HB_SOCKET_ERR_RESTARTSYS          43
#define HB_SOCKET_ERR_NOSR                44
#define HB_SOCKET_ERR_HOSTDOWN            45
#define HB_SOCKET_ERR_HOSTUNREACH         46
#define HB_SOCKET_ERR_NOTEMPTY            47
#define HB_SOCKET_ERR_USERS               48
#define HB_SOCKET_ERR_DQUOT               49
#define HB_SOCKET_ERR_STALE               50
#define HB_SOCKET_ERR_REMOTE              51
#define HB_SOCKET_ERR_PROCLIM             52
#define HB_SOCKET_ERR_DISCON              53
#define HB_SOCKET_ERR_NOMORE              54
#define HB_SOCKET_ERR_CANCELLED           55
#define HB_SOCKET_ERR_INVALIDPROCTABLE    56
#define HB_SOCKET_ERR_INVALIDPROVIDER     57
#define HB_SOCKET_ERR_PROVIDERFAILEDINIT  58
#define HB_SOCKET_ERR_REFUSED             59
#define HB_SOCKET_ERR_SYSNOTREADY         60
#define HB_SOCKET_ERR_VERNOTSUPPORTED     61
#define HB_SOCKET_ERR_NOTINITIALISED      62
#define HB_SOCKET_ERR_TRYAGAIN            63
#define HB_SOCKET_ERR_HOSTNOTFOUND        64
#define HB_SOCKET_ERR_NORECOVERY          65
#define HB_SOCKET_ERR_NODATA              66
#define HB_SOCKET_ERR_SYSCALLFAILURE      67
#define HB_SOCKET_ERR_SERVICENOTFOUND     68
#define HB_SOCKET_ERR_TYPENOTFOUND        69
#define HB_SOCKET_ERR_OTHER               70

/* address family */
#define HB_SOCKET_AF_LOCAL                1
#define HB_SOCKET_AF_INET                 2
#define HB_SOCKET_AF_IPX                  4
#define HB_SOCKET_AF_INET6                10
#define HB_SOCKET_AF_PACKET               17

/* protocol family */
#define HB_SOCKET_PF_LOCAL                HB_SOCKET_AF_LOCAL
#define HB_SOCKET_PF_INET                 HB_SOCKET_AF_INET
#define HB_SOCKET_PF_IPX                  HB_SOCKET_AF_IPX
#define HB_SOCKET_PF_INET6                HB_SOCKET_AF_INET6
#define HB_SOCKET_PF_PACKET               HB_SOCKET_AF_PACKET

/* protocol type */
#define HB_SOCKET_PT_STREAM               1
#define HB_SOCKET_PT_DGRAM                2
#define HB_SOCKET_PT_RAW                  3
#define HB_SOCKET_PT_RDM                  4
#define HB_SOCKET_PT_SEQPACKET            5

/* IP protocols */
#define HB_SOCKET_IPPROTO_IP              0     /* Dummy protocol for TCP */
#define HB_SOCKET_IPPROTO_ICMP            1     /* Internet Control Message Protocol */
#define HB_SOCKET_IPPROTO_IGMP            2     /* Internet Group Management Protocol */
#define HB_SOCKET_IPPROTO_IPIP            4     /* IPIP tunnels (older KA9Q tunnels use 94) */
#define HB_SOCKET_IPPROTO_TCP             6     /* Transmission Control Protocol */
#define HB_SOCKET_IPPROTO_EGP             8     /* Exterior Gateway Protocol */
#define HB_SOCKET_IPPROTO_PUP             12    /* PUP protocol */
#define HB_SOCKET_IPPROTO_UDP             17    /* User Datagram Protocol */
#define HB_SOCKET_IPPROTO_IDP             22    /* XNS IDP protocol */
#define HB_SOCKET_IPPROTO_DCCP            23    /* DCCP protocol */
#define HB_SOCKET_IPPROTO_RDP             29    /* RDP */
#define HB_SOCKET_IPPROTO_TP              29    /* SO Transport Protocol Class 4 */
#define HB_SOCKET_IPPROTO_IPV6            41    /* IPv6 header */
#define HB_SOCKET_IPPROTO_ROUTING         43    /* IPv6 routing header */
#define HB_SOCKET_IPPROTO_FRAGMENT        44    /* IPv6 fragmentation header */
#define HB_SOCKET_IPPROTO_RSVP            46    /* Reservation Protocol */
#define HB_SOCKET_IPPROTO_GRE             47    /* General Routing Encapsulation */
#define HB_SOCKET_IPPROTO_ESP             50    /* Encapsulating security payload */
#define HB_SOCKET_IPPROTO_AH              51    /* Authentication header */
#define HB_SOCKET_IPPROTO_ICMPV6          58    /* ICMP v6 */
#define HB_SOCKET_IPPROTO_NONE            59    /* IPv6 no next header */
#define HB_SOCKET_IPPROTO_DSTOPTS         60    /* IPv6 destination options */
#define HB_SOCKET_IPPROTO_ND              77    /* ND */
#define HB_SOCKET_IPPROTO_ICLFXBM         78    /* ICLFXBM */
#define HB_SOCKET_IPPROTO_EON             80    /* EON */
#define HB_SOCKET_IPPROTO_MTP             92    /* Multicast Transport Protocol */
#define HB_SOCKET_IPPROTO_ENCAP           98    /* Encapsulation Header */
#define HB_SOCKET_IPPROTO_PIM             103   /* Protocol Independent Multicast */
#define HB_SOCKET_IPPROTO_COMP            108   /* Compression Header Protocol */
#define HB_SOCKET_IPPROTO_PGM             113   /* PGM */
#define HB_SOCKET_IPPROTO_L2TP            115   /* L2TP */
#define HB_SOCKET_IPPROTO_SCTP            132   /* Stream Control Transmission Protocol */
#define HB_SOCKET_IPPROTO_RAW             255   /* Raw IP packets */

/* shutdown actions */
#define HB_SOCKET_SHUT_RD                 0
#define HB_SOCKET_SHUT_WR                 1
#define HB_SOCKET_SHUT_RDWR               2

/* interface information flags */
#define HB_SOCKET_IFF_UP                  0x0001   /* Interface is up */
#define HB_SOCKET_IFF_BROADCAST           0x0002   /* Broadcast address valid */
#define HB_SOCKET_IFF_LOOPBACK            0x0004   /* Is a loopback net */
#define HB_SOCKET_IFF_POINTOPOINT         0x0008   /* Interface is point-to-point link */
#define HB_SOCKET_IFF_MULTICAST           0x0010   /* Supports multicast */

/* Harbour interface information indexes */
#define HB_SOCKET_IFINFO_FAMILY           1     /* adress family */
#define HB_SOCKET_IFINFO_NAME             2     /* interface name */
#define HB_SOCKET_IFINFO_FLAGS            3     /* flags HB_SOCKET_IFF_* */
#define HB_SOCKET_IFINFO_ADDR             4     /* interface address */
#define HB_SOCKET_IFINFO_NETMASK          5     /* subnetmask */
#define HB_SOCKET_IFINFO_BROADCAST        6     /* broadcast address */
#define HB_SOCKET_IFINFO_P2PADDR          7     /* point-to-point address */
#define HB_SOCKET_IFINFO_HWADDR           8     /* hardware address */
#define HB_SOCKET_IFINFO_LEN              8

/* Socket address array indexes */
#define HB_SOCKET_ADINFO_FAMILY           1
#define HB_SOCKET_ADINFO_ADDRESS          2     /* HB_SOCKET_AF_INET, HB_SOCKET_AF_INET6 */
#define HB_SOCKET_ADINFO_PATH             2     /* HB_SOCKET_AF_LOCAL */
#define HB_SOCKET_ADINFO_PORT             3     /* HB_SOCKET_AF_INET, HB_SOCKET_AF_INET6 */

#endif /* HB_SOCKET_CH_ */
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Enviando mensajes de WhatsApp

Post by JmGarcia »

Gracias Antonio.

¿ Y la librería que me falta cual es ?

Me da estos errores:

Code: Select all

Error: Unresolved external '_HB_FUN_HB_SOCKETGETHOSTS' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETOPEN' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETCONNECT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_NUMTOHEX' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_STRFORMAT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_BASE64DECODE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_BASE64ENCODE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETRECV' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETSEND' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETSHUTDOWN' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SOCKETCLOSE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_TSTOSTR' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_STOT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_DATETIME' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_HOUR' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_MINUTE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SEC' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_TTOD' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Estas son las librerías que uso:

Code: Select all

"C:\Bases\Pruebas\WhatsApp.obj" +
"C:\Lenguas\BCC582\Lib\c0w32.obj", +
"C:\Bases\Pruebas\WhatsApp.exe","c:\bases\pruebas\whatsapp.map", +
"C:\Bases\FWH1201\LIB\Fivehc.lib" +
"C:\Bases\FWH1201\LIB\Fivehx.lib" +
"C:\Bases\FWH1201\xHarbour\lib\dbffpt.lib" +
"C:\Bases\FWH1201\xHarbour\lib\hbsix.lib" +
"C:\Bases\FWH1201\xHarbour\lib\pcrepos.lib" +
"C:\Bases\FWH1201\xHarbour\lib\ct.lib" +
"C:\Bases\FWH1201\xHarbour\lib\tip.lib" +
"C:\Lenguas\BCC582\Lib\PSDK\msimg32.lib" +
"C:\Lenguas\BCC582\Lib\PSDK\psapi.lib" +
"C:\Bases\FWH1201\xHarbour\lib\rtl.lib" +
"C:\Bases\FWH1201\xHarbour\lib\vm.lib" +
"C:\Bases\FWH1201\xHarbour\lib\rdd.lib" +
"C:\Bases\FWH1201\xHarbour\lib\dbfcdx.lib" +
"C:\Bases\FWH1201\xHarbour\lib\dbfntx.lib" +
"C:\Bases\FWH1201\xHarbour\lib\lang.lib" +
"C:\Bases\FWH1201\xHarbour\lib\macro.lib" +
"C:\Bases\FWH1201\xHarbour\lib\debug.lib" +
"C:\Bases\FWH1201\xHarbour\lib\common.lib" +
"C:\Bases\FWH1201\xHarbour\lib\pp.lib" +
"C:\Bases\FWH1201\xHarbour\lib\gtstd.lib" +
"C:\Lenguas\BCC582\Lib\cw32.lib" +
"C:\Lenguas\BCC582\Lib\import32.lib",
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Enviando mensajes de WhatsApp

Post by Antonio Linares »

Necesitas usar una versi'on mas reciente de xHarbour que puedes descargar desde aqui:

http://code.google.com/p/harbour-and-xh ... loads/list
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Enviando mensajes de WhatsApp

Post by JmGarcia »

Supongo que te refieres a este archivo xharbour_bcc582_20120814.zip

Gracias.

Todavia me da unos pocos errores de alguna librería que me falta:

Code: Select all

Error: Unresolved external '_HB_FUN_HB_NUMTOHEX' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_STRFORMAT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_BASE64DECODE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_BASE64ENCODE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_TSTOSTR' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_STOT' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_DATETIME' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_HOUR' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_MINUTE' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_SEC' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Error: Unresolved external '_HB_FUN_HB_TTOD' referenced from C:\BASES\PRUEBAS\WHATSAPP.OBJ
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Post Reply