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.
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
#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
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
lucasdebeltran wrote:Antonio,
Creo que esto es de interés:
http://bandaancha.eu/foros/tu-contrasen ... ei-1697483
/*
* $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_ */
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
"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",
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
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 50 guests