2008-06-19 11:08 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* contrib/hbtip/cgi.prg
* contrib/hbtip/encoder.prg
* contrib/hbtip/ftpcln.prg
* contrib/hbtip/httpcln.prg
* contrib/hbtip/mail.prg
* contrib/hbtip/popcln.prg
* contrib/hbtip/sendmail.prg
* contrib/hbtip/sessid.prg
* contrib/hbtip/smtpcln.prg
* contrib/hbtip/thtml.prg
* contrib/hbtip/url.prg
* Some formatting, cleanups, <> -> !=
* contrib/hbtip/sendmail.prg
+ hb_SendMail(): Added <cReplyTo> parameter.
* contrib/hbtip/thtml.prg
! Removed five remaining _SET_EXACT dependent
string comparisons. Exact comparisons were
used for all these cases, with a NOTE added.
This commit is contained in:
@@ -8,6 +8,28 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2008-06-19 11:08 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/hbtip/cgi.prg
|
||||
* contrib/hbtip/encoder.prg
|
||||
* contrib/hbtip/ftpcln.prg
|
||||
* contrib/hbtip/httpcln.prg
|
||||
* contrib/hbtip/mail.prg
|
||||
* contrib/hbtip/popcln.prg
|
||||
* contrib/hbtip/sendmail.prg
|
||||
* contrib/hbtip/sessid.prg
|
||||
* contrib/hbtip/smtpcln.prg
|
||||
* contrib/hbtip/thtml.prg
|
||||
* contrib/hbtip/url.prg
|
||||
* Some formatting, cleanups, <> -> !=
|
||||
|
||||
* contrib/hbtip/sendmail.prg
|
||||
+ hb_SendMail(): Added <cReplyTo> parameter.
|
||||
|
||||
* contrib/hbtip/thtml.prg
|
||||
! Removed five remaining _SET_EXACT dependent
|
||||
string comparisons. Exact comparisons were
|
||||
used for all these cases, with a NOTE added.
|
||||
|
||||
2008-06-19 02:25 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/hbtip/common.mak
|
||||
! Added missing sendmail.prg
|
||||
|
||||
@@ -61,15 +61,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include 'hbclass.ch'
|
||||
#include 'tip.ch'
|
||||
#include 'common.ch'
|
||||
#include 'fileio.ch'
|
||||
#include "hbclass.ch"
|
||||
#include "tip.ch"
|
||||
#include "common.ch"
|
||||
#include "fileio.ch"
|
||||
|
||||
#define CGI_IN 0
|
||||
#define CGI_OUT 1
|
||||
#define _CRLF chr(13)+chr(10)
|
||||
#define _BR '<br />'
|
||||
#define _BR "<br />"
|
||||
|
||||
CLASS TIpCgi
|
||||
|
||||
@@ -121,22 +121,22 @@ METHOD New() CLASS TIpCgi
|
||||
|
||||
::bSavedErrHandler := ErrorBlock( { |e| ::ErrHandler( e ) } )
|
||||
|
||||
::cCgiHeader := ''
|
||||
::cHtmlPage := ''
|
||||
::cCgiHeader := ""
|
||||
::cHtmlPage := ""
|
||||
|
||||
lPost := ( 'POST' $ Upper( getenv( 'REQUEST_METHOD' ) ) )
|
||||
lPost := ( "POST" $ Upper( getenv( "REQUEST_METHOD" ) ) )
|
||||
if lPost
|
||||
nLen := val( getenv( 'CONTENT_LENGTH' ) )
|
||||
nLen := val( getenv( "CONTENT_LENGTH" ) )
|
||||
cTemp := space( nLen )
|
||||
if ( ( nRead := fread( CGI_IN, @cTemp, nLen, 0 ) ) != nLen )
|
||||
::ErrHandler( 'post error read ' + str( nRead ) + ' instead of ' + str( nLen ) )
|
||||
::ErrHandler( "post error read " + str( nRead ) + " instead of " + str( nLen ) )
|
||||
else
|
||||
::HTTP_RAW_POST_DATA := cTemp
|
||||
aTemp := HB_ATOKENS( cTemp, '&' )
|
||||
aTemp := HB_ATOKENS( cTemp, "&" )
|
||||
nLen := Len( aTemp )
|
||||
if nLen > 0
|
||||
for nCount := 1 TO nLen
|
||||
aVar := HB_ATOKENS( aTemp[ nCount ], '=' )
|
||||
aVar := HB_ATOKENS( aTemp[ nCount ], "=" )
|
||||
if Len( aVar ) == 2
|
||||
::hPosts[ alltrim( TipEncoderUrl_Decode( aVar[ 1 ] ) ) ] := TipEncoderUrl_Decode( aVar[ 2 ] )
|
||||
endif
|
||||
@@ -144,13 +144,13 @@ METHOD New() CLASS TIpCgi
|
||||
endif
|
||||
endif
|
||||
else
|
||||
cTemp := getenv( 'QUERY_STRING' )
|
||||
cTemp := getenv( "QUERY_STRING" )
|
||||
if !empty( cTemp )
|
||||
aTemp := HB_ATOKENS( cTemp, '&' )
|
||||
aTemp := HB_ATOKENS( cTemp, "&" )
|
||||
nLen := Len( aTemp )
|
||||
if nLen > 0
|
||||
for nCount := 1 TO nLen
|
||||
aVar := HB_ATOKENS( aTemp[ nCount ], '=' )
|
||||
aVar := HB_ATOKENS( aTemp[ nCount ], "=" )
|
||||
if Len( aVar ) == 2
|
||||
::hGets[ alltrim( TipEncoderUrl_Decode( aVar[ 1 ] ) ) ] := TipEncoderUrl_Decode( aVar[ 2 ] )
|
||||
endif
|
||||
@@ -159,13 +159,13 @@ METHOD New() CLASS TIpCgi
|
||||
endif
|
||||
endif
|
||||
|
||||
cTemp := getenv( 'HTTP_COOKIE' )
|
||||
cTemp := getenv( "HTTP_COOKIE" )
|
||||
if !empty( cTemp )
|
||||
aTemp := HB_ATOKENS( cTemp, ';' )
|
||||
aTemp := HB_ATOKENS( cTemp, ";" )
|
||||
nLen := Len( aTemp )
|
||||
if nLen > 0
|
||||
for nCount := 1 TO nLen
|
||||
aVar := HB_ATOKENS( aTemp[ nCount ], '=' )
|
||||
aVar := HB_ATOKENS( aTemp[ nCount ], "=" )
|
||||
if Len( aVar ) == 2
|
||||
::hCookies[ alltrim( TipEncoderUrl_Decode( aVar[ 1 ] ) ) ] := TipEncoderUrl_Decode( aVar[ 2 ] )
|
||||
endif
|
||||
@@ -178,7 +178,7 @@ METHOD New() CLASS TIpCgi
|
||||
METHOD Header( cValue ) CLASS TIpCgi
|
||||
|
||||
if empty( cValue )
|
||||
::cCgiHeader += 'Content-Type: text/html' + _CRLF
|
||||
::cCgiHeader += "Content-Type: text/html" + _CRLF
|
||||
else
|
||||
::cCgiHeader += cValue + _CRLF
|
||||
endif
|
||||
@@ -187,7 +187,7 @@ METHOD Header( cValue ) CLASS TIpCgi
|
||||
|
||||
METHOD Redirect( cUrl ) CLASS TIpCgi
|
||||
|
||||
::cCgiHeader += 'Location: ' + cUrl + _CRLF
|
||||
::cCgiHeader += "Location: " + cUrl + _CRLF
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -210,7 +210,7 @@ METHOD Flush() CLASS TIpCgi
|
||||
local cSID := ::cSID
|
||||
local cSession
|
||||
|
||||
hb_hEval( ::hCookies, { |k,v| ::cCgiHeader += 'Set-Cookie: ' + k + '=' + v + ';' + _CRLF } )
|
||||
hb_hEval( ::hCookies, { |k,v| ::cCgiHeader += "Set-Cookie: " + k + "=" + v + ";" + _CRLF } )
|
||||
|
||||
cStream := ::cCgiHeader + _CRLF + ::cHtmlPage + _CRLF
|
||||
|
||||
@@ -228,8 +228,8 @@ METHOD Flush() CLASS TIpCgi
|
||||
fclose( nH )
|
||||
endif
|
||||
|
||||
::cCgiHeader := ''
|
||||
::cHtmlPage := ''
|
||||
::cCgiHeader := ""
|
||||
::cHtmlPage := ""
|
||||
|
||||
if !empty( cSID )
|
||||
|
||||
@@ -271,10 +271,10 @@ METHOD DestroySession( cID ) CLASS TIpCgi
|
||||
if !( lRet := ( FErase( cFile ) == 0 ) )
|
||||
::Print( "ERROR: On deleting session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
else
|
||||
::hCookies[ 'SESSIONID' ] := cSID + "; expires= " + TIP_DateToGMT( DATE() - 1 )
|
||||
::hCookies[ "SESSIONID" ] := cSID + "; expires= " + TIP_DateToGMT( DATE() - 1 )
|
||||
::CreateSID()
|
||||
cSID := ::cSID
|
||||
::hCookies[ 'SESSIONID' ] := cSID
|
||||
::hCookies[ "SESSIONID" ] := cSID
|
||||
endif
|
||||
|
||||
endif
|
||||
@@ -389,11 +389,11 @@ METHOD StartSession( cSID ) CLASS TIpCgi
|
||||
|
||||
if empty( cSID )
|
||||
|
||||
if ( nH := hb_HPos( ::hGets, 'SESSIONID' ) ) != 0
|
||||
if ( nH := hb_HPos( ::hGets, "SESSIONID" ) ) != 0
|
||||
cSID := hb_HValueAt( ::hGets, nH )
|
||||
elseif ( nH := hb_HPos( ::hPosts, 'SESSIONID' ) ) != 0
|
||||
elseif ( nH := hb_HPos( ::hPosts, "SESSIONID" ) ) != 0
|
||||
cSID := hb_HValueAt( ::hPosts, nH )
|
||||
elseif ( nH := hb_HPos( ::hCookies, 'SESSIONID' ) ) != 0
|
||||
elseif ( nH := hb_HPos( ::hCookies, "SESSIONID" ) ) != 0
|
||||
cSID := hb_HValueAt( ::hCookies, nH )
|
||||
endif
|
||||
|
||||
@@ -432,7 +432,7 @@ METHOD StartSession( cSID ) CLASS TIpCgi
|
||||
|
||||
endif
|
||||
|
||||
::hCookies[ 'SESSIONID' ] := ::cSID
|
||||
::hCookies[ "SESSIONID" ] := ::cSID
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -448,9 +448,9 @@ METHOD SessionDecode( cData ) CLASS TIpCgi
|
||||
|
||||
STATIC FUNCTION HtmlTag( xVal, cKey, cDefault )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
|
||||
DEFAULT cDefault TO ''
|
||||
DEFAULT cDefault TO ""
|
||||
|
||||
if !empty( xVal ) .and. !empty( cKey )
|
||||
if hb_hHasKey( xVal, cKey )
|
||||
@@ -459,21 +459,21 @@ STATIC FUNCTION HtmlTag( xVal, cKey, cDefault )
|
||||
endif
|
||||
endif
|
||||
|
||||
if cVal == ''
|
||||
if cVal == ""
|
||||
cVal := cDefault
|
||||
endif
|
||||
|
||||
if !( cVal == '' )
|
||||
cVal := '<' + cKey + '>' + cVal + '</' + cKey + '>'
|
||||
if !( cVal == "" )
|
||||
cVal := "<" + cKey + ">" + cVal + "</" + cKey + ">"
|
||||
endif
|
||||
|
||||
return cVal
|
||||
|
||||
STATIC FUNCTION HtmlAllTag( hTags, cSep )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
|
||||
DEFAULT cSep TO ' '
|
||||
DEFAULT cSep TO " "
|
||||
|
||||
hb_hEval( hTags, { |k| cVal += HtmlTag( hTags, k ) + cSep } )
|
||||
|
||||
@@ -481,7 +481,7 @@ STATIC FUNCTION HtmlAllTag( hTags, cSep )
|
||||
|
||||
STATIC FUNCTION HtmlOption( xVal, cKey, cPre, cPost, lScan )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
|
||||
if !empty( xVal )
|
||||
if empty( cKey )
|
||||
@@ -505,9 +505,9 @@ STATIC FUNCTION HtmlOption( xVal, cKey, cPre, cPost, lScan )
|
||||
|
||||
STATIC FUNCTION HtmlAllOption( hOptions, cSep )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
|
||||
DEFAULT cSep TO ' '
|
||||
DEFAULT cSep TO " "
|
||||
|
||||
if !empty( hOptions )
|
||||
hb_hEval( hOptions, { |k| cVal += HtmlOption( hOptions, k,,, .t. ) + cSep } )
|
||||
@@ -517,9 +517,9 @@ STATIC FUNCTION HtmlAllOption( hOptions, cSep )
|
||||
|
||||
STATIC FUNCTION HtmlValue( xVal, cKey, cDefault )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
|
||||
DEFAULT cDefault TO ''
|
||||
DEFAULT cDefault TO ""
|
||||
|
||||
if !empty( xVal ) .and. !empty( cKey )
|
||||
if hb_hHasKey( xVal, cKey )
|
||||
@@ -528,7 +528,7 @@ STATIC FUNCTION HtmlValue( xVal, cKey, cDefault )
|
||||
endif
|
||||
endif
|
||||
|
||||
if cVal == ''
|
||||
if cVal == ""
|
||||
cVal := cDefault
|
||||
endif
|
||||
|
||||
@@ -536,9 +536,9 @@ STATIC FUNCTION HtmlValue( xVal, cKey, cDefault )
|
||||
|
||||
STATIC FUNCTION HtmlAllValue( hValues, cSep )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
|
||||
DEFAULT cSep TO ' '
|
||||
DEFAULT cSep TO " "
|
||||
|
||||
if !empty( hValues )
|
||||
hb_hEval( hValues, { |k| cVal += HtmlValue( hValues, k ) + cSep } )
|
||||
@@ -548,34 +548,34 @@ STATIC FUNCTION HtmlAllValue( hValues, cSep )
|
||||
|
||||
STATIC FUNCTION HtmlScript( xVal, cKey )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
local nPos
|
||||
local cTmp
|
||||
|
||||
DEFAULT cKey TO 'script'
|
||||
DEFAULT cKey TO "script"
|
||||
|
||||
if !empty( xVal )
|
||||
if ( nPos := hb_HPos( xVal, cKey ) ) != 0
|
||||
cVal := hb_HValueAt( xVal, nPos )
|
||||
if valtype( cVal ) == "H"
|
||||
if ( nPos := hb_HPos( cVal, 'src' ) ) != 0
|
||||
if ( nPos := hb_HPos( cVal, "src" ) ) != 0
|
||||
cVal := hb_HValueAt( cVal, nPos )
|
||||
if valtype( cVal ) == "C"
|
||||
cVal := { cVal }
|
||||
endif
|
||||
if valtype( cVal ) == "A"
|
||||
cTmp := ''
|
||||
cTmp := ""
|
||||
ascan( cVal, { |cFile| cTmp += '<script src="' + cFile + '" type="text/javascript">' + _CRLF } )
|
||||
cVal := cTmp
|
||||
endif
|
||||
endif
|
||||
if ( nPos := hb_HPos( cVal, 'var' ) ) != 0
|
||||
if ( nPos := hb_HPos( cVal, "var" ) ) != 0
|
||||
cVal := hb_HValueAt( cVal, nPos )
|
||||
if valtype( cVal ) == "C"
|
||||
cVal := { cVal }
|
||||
endif
|
||||
if valtype( cVal ) == "A"
|
||||
cTmp := ''
|
||||
cTmp := ""
|
||||
ascan( cVal, { |cVar| cTmp += cVar } )
|
||||
cVal := '<script type="text/javascript">' + _CRLF + '<!--' + _CRLF + cTmp + _CRLF + '-->' + _CRLF + '</script>' + _CRLF
|
||||
endif
|
||||
@@ -589,34 +589,34 @@ STATIC FUNCTION HtmlScript( xVal, cKey )
|
||||
|
||||
STATIC FUNCTION HtmlStyle( xVal, cKey )
|
||||
|
||||
local cVal := ''
|
||||
local cVal := ""
|
||||
local nPos
|
||||
local cTmp
|
||||
|
||||
DEFAULT cKey TO 'style'
|
||||
DEFAULT cKey TO "style"
|
||||
|
||||
if !empty( xVal )
|
||||
if ( nPos := hb_HPos( xVal, cKey ) ) != 0
|
||||
cVal := hb_HValueAt( xVal, nPos )
|
||||
if valtype( cVal ) == "H"
|
||||
if ( nPos := hb_HPos( cVal, 'src' ) ) != 0
|
||||
if ( nPos := hb_HPos( cVal, "src" ) ) != 0
|
||||
cVal := hb_HValueAt( cVal, nPos )
|
||||
if valtype( cVal ) == "C"
|
||||
cVal := { cVal }
|
||||
endif
|
||||
if valtype( cVal ) == "A"
|
||||
cTmp := ''
|
||||
cTmp := ""
|
||||
ascan( cVal, { |cFile| cTmp += '<link rel="StyleSheet" href="' + cFile + '" type="text/css" />' + _CRLF } )
|
||||
cVal := cTmp
|
||||
endif
|
||||
endif
|
||||
if ( nPos := hb_HPos( cVal, 'var' ) ) != 0
|
||||
if ( nPos := hb_HPos( cVal, "var" ) ) != 0
|
||||
cVal := hb_HValueAt( cVal, nPos )
|
||||
if valtype( cVal ) == "C"
|
||||
cVal := { cVal }
|
||||
endif
|
||||
if valtype( cVal ) == "A"
|
||||
cTmp := ''
|
||||
cTmp := ""
|
||||
ascan( cVal, { |cVar| cTmp += cVar } )
|
||||
cVal := '<style type="text/css">' + _CRLF + '<!--' + _CRLF + cTmp + _CRLF + '-->' + _CRLF + '</style>' + _CRLF
|
||||
endif
|
||||
@@ -627,5 +627,3 @@ STATIC FUNCTION HtmlStyle( xVal, cKey )
|
||||
endif
|
||||
|
||||
return cVal
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
FUNCTION TIp_GetEncoder( cModel )
|
||||
LOCAL oEncoder
|
||||
|
||||
IF Valtype( cModel ) <> "C"
|
||||
IF !( Valtype( cModel ) == "C" )
|
||||
cModel := "as-is"
|
||||
ENDIF
|
||||
|
||||
@@ -108,7 +108,7 @@ ENDCLASS
|
||||
|
||||
|
||||
METHOD New( cModel ) class TIPEncoder
|
||||
IF Valtype( cModel ) <> "C"
|
||||
IF !( Valtype( cModel ) == "C" )
|
||||
cModel := "as-is"
|
||||
ENDIF
|
||||
::cName := cModel
|
||||
|
||||
@@ -237,14 +237,14 @@ METHOD GetReply() CLASS tIPClientFTP
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
// now, if the reply has a '-' as fourth character, we need to proceed...
|
||||
DO WHILE .not. Empty(cRep) .and. SubStr( cRep, 4, 1 ) == '-'
|
||||
// now, if the reply has a "-" as fourth character, we need to proceed...
|
||||
DO WHILE .not. Empty(cRep) .and. SubStr( cRep, 4, 1 ) == "-"
|
||||
::cReply := ::InetRecvLine( ::SocketCon, @nLen, 128 )
|
||||
cRep := IIf(ValType(::cReply) == "C", ::cReply, "")
|
||||
ENDDO
|
||||
|
||||
// 4 and 5 are error codes
|
||||
IF ::InetErrorCode( ::SocketCon ) != 0 .or. SubStr( ::cReply, 1, 1) >= '4'
|
||||
IF ::InetErrorCode( ::SocketCon ) != 0 .or. SubStr( ::cReply, 1, 1) >= "4"
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
@@ -299,7 +299,7 @@ RETURN ::GetReply()
|
||||
|
||||
|
||||
METHOD Rest( nPos ) CLASS tIPClientFTP
|
||||
::InetSendall( ::SocketCon, "REST " + alltrim( Str( If( Empty( nPos ), 0, nPos ) ) ) + ::cCRLF )
|
||||
::InetSendall( ::SocketCon, "REST " + alltrim( Str( iif( Empty( nPos ), 0, nPos ) ) ) + ::cCRLF )
|
||||
RETURN ::GetReply()
|
||||
|
||||
|
||||
@@ -384,9 +384,9 @@ METHOD List( cSpec ) CLASS tIPClientFTP
|
||||
LOCAL cStr
|
||||
|
||||
IF cSpec == nil
|
||||
cSpec := ''
|
||||
cSpec := ""
|
||||
ELSE
|
||||
cSpec := ' ' + cSpec
|
||||
cSpec := " " + cSpec
|
||||
ENDIF
|
||||
IF ::bUsePasv
|
||||
IF .not. ::Pasv()
|
||||
@@ -611,10 +611,10 @@ METHOD MGET( cSpec,cLocalPath ) CLASS tIPClientFTP
|
||||
LOCAL cStr,cfile,aFiles
|
||||
|
||||
IF cSpec == nil
|
||||
cSpec := ''
|
||||
cSpec := ""
|
||||
ENDIF
|
||||
IF cLocalPath=nil
|
||||
cLocalPath:=''
|
||||
cLocalPath:=""
|
||||
ENDIF
|
||||
IF ::bUsePasv
|
||||
IF .not. ::Pasv()
|
||||
@@ -627,7 +627,7 @@ METHOD MGET( cSpec,cLocalPath ) CLASS tIPClientFTP
|
||||
cStr := ::ReadAuxPort()
|
||||
|
||||
IF !empty(cStr)
|
||||
aFiles:=hb_atokens(strtran(cStr,chr(13),''),chr(10))
|
||||
aFiles:=hb_atokens(strtran(cStr,chr(13),""),chr(10))
|
||||
FOR each cFile in aFiles
|
||||
IF !Empty(cFile) //PM:09-08-2007 Needed because of the new HB_aTokens()
|
||||
::downloadfile( cLocalPath+trim(cFile), trim(cFile) )
|
||||
@@ -644,7 +644,7 @@ METHOD MPUT( cFileSpec, cAttr ) CLASS tIPClientFTP
|
||||
LOCAL nCount := 0
|
||||
LOCAL cStr := ""
|
||||
|
||||
IF Valtype( cFileSpec ) <> "C"
|
||||
IF !( Valtype( cFileSpec ) == "C" )
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
@@ -707,7 +707,7 @@ METHOD LS( cSpec ) CLASS tIPClientFTP
|
||||
LOCAL cStr
|
||||
|
||||
IF cSpec == nil
|
||||
cSpec := ''
|
||||
cSpec := ""
|
||||
ENDIF
|
||||
|
||||
IF ::bUsePasv .AND. ! ::Pasv()
|
||||
@@ -723,7 +723,7 @@ METHOD LS( cSpec ) CLASS tIPClientFTP
|
||||
IF ::GetReply()
|
||||
cStr := ::ReadAuxPort()
|
||||
ELSE
|
||||
cStr := ''
|
||||
cStr := ""
|
||||
ENDIF
|
||||
|
||||
RETURN cStr
|
||||
@@ -815,7 +815,7 @@ METHOD listFiles( cFileSpec ) CLASS tIPClientFTP
|
||||
RETURN {}
|
||||
ENDIF
|
||||
|
||||
aList := HB_ATokens( StrTran( cList, Chr(13),''), Chr(10) )
|
||||
aList := HB_ATokens( StrTran( cList, Chr(13),""), Chr(10) )
|
||||
|
||||
FOR EACH cEntry IN aList
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ RETURN cData
|
||||
|
||||
METHOD ReadAll() CLASS tIPClientHTTP
|
||||
|
||||
local cOut:='', cChunk
|
||||
local cOut:="", cChunk
|
||||
IF .not. ::bInitialized
|
||||
::bInitialized := .T.
|
||||
IF .not. ::Get()
|
||||
@@ -382,12 +382,12 @@ METHOD setCookie(cLine) CLASS tIPClientHTTP
|
||||
local cDefaultHost:=::oUrl:cServer, cDefaultPath:=::oUrl:cPath
|
||||
local x,y
|
||||
IF empty(cDefaultPath)
|
||||
cDefaultPath:='/'
|
||||
cDefaultPath:="/"
|
||||
ENDIF
|
||||
//this function currently ignores expires, secure and other tags that may be in the cookie for now...
|
||||
// ?'Setting COOKIE:',cLine
|
||||
// ?"Setting COOKIE:",cLine
|
||||
aParam := HB_RegexSplit( ";", cLine )
|
||||
cName:=cValue:=''
|
||||
cName:=cValue:=""
|
||||
cHost:=cDefaultHost
|
||||
cPath:=cDefaultPath
|
||||
y:=len(aParam)
|
||||
@@ -400,10 +400,10 @@ METHOD setCookie(cLine) CLASS tIPClientHTTP
|
||||
else
|
||||
cElement:=upper(alltrim(aElements[1]))
|
||||
do case
|
||||
//case cElement=='EXPIRES'
|
||||
case cElement=='PATH'
|
||||
//case cElement=="EXPIRES"
|
||||
case cElement=="PATH"
|
||||
cPath:=alltrim(aElements[2])
|
||||
case cElement=='DOMAIN'
|
||||
case cElement=="DOMAIN"
|
||||
cHost:=alltrim(aElements[2])
|
||||
endcase
|
||||
ENDIF
|
||||
@@ -424,14 +424,14 @@ return NIL
|
||||
|
||||
METHOD getcookies(cHost,cPath) CLASS tIPClientHTTP
|
||||
local x,y,aDomKeys:={},aKeys,z,cKey,aPathKeys,nPath
|
||||
local a,b,cOut:='',c,d
|
||||
local a,b,cOut:="",c,d
|
||||
IF cHost=nil
|
||||
cHost:=::oUrl:cServer
|
||||
ENDIF
|
||||
IF cPath=nil
|
||||
cPath:=::oUrl:cPath
|
||||
IF empty(cPath)
|
||||
cPath:='/'
|
||||
cPath:="/"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF empty(cHost)
|
||||
@@ -445,7 +445,7 @@ METHOD getcookies(cHost,cPath) CLASS tIPClientHTTP
|
||||
cHost:=upper(cHost)
|
||||
FOR x := 1 TO y
|
||||
cKey:=upper(aKeys[x])
|
||||
IF upper(right(cKey,z))==cHost.and.(len(cKey)=z .OR. substr(aKeys[x],0-z,1)=='.')
|
||||
IF upper(right(cKey,z))==cHost.and.(len(cKey)=z .OR. substr(aKeys[x],0-z,1)==".")
|
||||
aadd(aDomKeys,aKeys[x])
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -461,7 +461,7 @@ METHOD getcookies(cHost,cPath) CLASS tIPClientHTTP
|
||||
FOR a:= 1 TO b
|
||||
cKey:=aKeys[a]
|
||||
z:=len(cKey)
|
||||
IF cKey=='/'.or.(z<=nPath.and.substr(cKey,1,nPath)==cKey)
|
||||
IF cKey=="/".or.(z<=nPath.and.substr(cKey,1,nPath)==cKey)
|
||||
aadd(aPathKeys,aKeys[a])
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -472,9 +472,9 @@ METHOD getcookies(cHost,cPath) CLASS tIPClientHTTP
|
||||
d:=len(aKeys)
|
||||
FOR c := 1 TO d
|
||||
IF !empty(cOut)
|
||||
cOut+='; '
|
||||
cOut+="; "
|
||||
ENDIF
|
||||
cOut+=aKeys[c]+'='+::hCookies[aDomKeys[x]][aPathKeys[a]][aKeys[c]]
|
||||
cOut+=aKeys[c]+"="+::hCookies[aDomKeys[x]][aPathKeys[a]][aKeys[c]]
|
||||
NEXT
|
||||
NEXT
|
||||
NEXT
|
||||
@@ -497,13 +497,13 @@ METHOD Boundary(nType) CLASS tIPClientHTTP
|
||||
nType=0
|
||||
ENDIF
|
||||
IF empty(cBound)
|
||||
cBound:=replicate('-',27)+space(11)
|
||||
cBound:=replicate("-",27)+space(11)
|
||||
FOR i := 28 TO 38
|
||||
cBound := Stuff( cBound, i, 1, str(int(HB_Random(0, 9 )),1,0) )
|
||||
NEXT
|
||||
::cBoundary:=cBound
|
||||
endif
|
||||
cBound:=if(nType<2,'--','')+cBound+if(nType=1,'--','')
|
||||
cBound:=iif(nType<2,"--","")+cBound+if(nType=1,"--","")
|
||||
RETURN(cBound)
|
||||
|
||||
METHOD Attach(cName,cFileName,cType) CLASS tIPClientHTTP
|
||||
@@ -553,7 +553,7 @@ METHOD PostMultiPart( cPostData, cQuery ) CLASS tIPClientHTTP
|
||||
cName:=oSub[1]
|
||||
cFile:=oSub[2]
|
||||
cType:=oSub[3]
|
||||
cTmp:=strtran(cFile,'/','\')
|
||||
cTmp:=strtran(cFile,"/","\")
|
||||
if ( nPos := rat( "\", cTmp ) ) != 0
|
||||
cFilePath := substr( cTmp, 1, nPos )
|
||||
elseif ( nPos := rat( ":", cTmp ) ) != 0
|
||||
@@ -563,7 +563,7 @@ METHOD PostMultiPart( cPostData, cQuery ) CLASS tIPClientHTTP
|
||||
endif
|
||||
cTmp:=substr(cFile,Len(cFilePath)+1)
|
||||
IF empty(cType)
|
||||
cType:='text/html'
|
||||
cType:="text/html"
|
||||
ENDIF
|
||||
cData += cBound+cCrlf+'Content-Disposition: form-data; name="'+cName +'"; filename="'+cTmp+'"'+cCrlf+'Content-Type: '+cType+cCrLf+cCrLf
|
||||
//hope this is not a big file....
|
||||
@@ -584,7 +584,7 @@ METHOD PostMultiPart( cPostData, cQuery ) CLASS tIPClientHTTP
|
||||
fClose(nFile)
|
||||
cData+=cCrlf
|
||||
NEXT
|
||||
cData+=cBound+'--'+cCrlf
|
||||
cData+=cBound+"--"+cCrlf
|
||||
IF .not. HB_IsString( cQuery )
|
||||
cQuery := ::oUrl:BuildQuery()
|
||||
ENDIF
|
||||
|
||||
@@ -250,7 +250,7 @@ METHOD Attach( oSubPart ) CLASS TipMail
|
||||
IF HB_IsObject( oSubPart ) .and. oSubPart:ClassName == "TIPMAIL"
|
||||
// reset wrong content-type
|
||||
IF At( "multipart/", Lower( ::GetFieldPart("Content-Type")) ) == 0
|
||||
::hHeaders["Content-Type"] := "multipart/mixed"
|
||||
::hHeaders[ "Content-Type" ] := "multipart/mixed"
|
||||
ENDIF
|
||||
|
||||
AAdd( ::aAttachments, oSubPart )
|
||||
@@ -287,13 +287,13 @@ METHOD ToString() CLASS TipMail
|
||||
LOCAL cRet := ""
|
||||
// this is a multipart message; we need a boundary
|
||||
IF Len( ::aAttachments ) > 0
|
||||
::hHeaders["Mime-Version"] :="1.0"
|
||||
::hHeaders[ "Mime-Version" ] :="1.0"
|
||||
endif
|
||||
|
||||
IF Len( ::aAttachments ) > 0
|
||||
//Reset failing content type
|
||||
IF At( "multipart/", Lower( ::GetFieldPart("Content-Type")) ) == 0
|
||||
::hHeaders["Content-Type"] := "multipart/mixed"
|
||||
::hHeaders[ "Content-Type" ] := "multipart/mixed"
|
||||
ENDIF
|
||||
|
||||
// have we got it already?
|
||||
@@ -310,29 +310,29 @@ METHOD ToString() CLASS TipMail
|
||||
// Begin output the fields
|
||||
// Presenting them in a "well-known" order
|
||||
IF "Return-Path" $ ::hHeaders
|
||||
cRet+= "Return-Path: "+::hHeaders[ "Return-Path"] + e"\r\n"
|
||||
cRet += "Return-Path: "+::hHeaders[ "Return-Path" ] + e"\r\n"
|
||||
ENDIF
|
||||
IF "Delivered-To" $ ::hHeaders
|
||||
cRet+= "Delivered-To: "+::hHeaders[ "Delivered-To"] + e"\r\n"
|
||||
cRet += "Delivered-To: "+::hHeaders[ "Delivered-To" ] + e"\r\n"
|
||||
ENDIF
|
||||
FOR EACH cElem IN ::aReceived
|
||||
cRet+= "Received: "+ cElem+ e"\r\n"
|
||||
cRet += "Received: "+ cElem+ e"\r\n"
|
||||
NEXT
|
||||
IF "Date" $ ::hHeaders
|
||||
cRet+= "Date: "+::hHeaders[ "Date"] + e"\r\n"
|
||||
cRet += "Date: "+::hHeaders[ "Date" ] + e"\r\n"
|
||||
ENDIF
|
||||
IF "From" $ ::hHeaders
|
||||
cRet+= "From: "+::hHeaders[ "From"] + e"\r\n"
|
||||
cRet += "From: "+::hHeaders[ "From" ] + e"\r\n"
|
||||
ENDIF
|
||||
IF "To" $ ::hHeaders
|
||||
cRet+= "To: "+::hHeaders[ "To"] + e"\r\n"
|
||||
cRet += "To: "+::hHeaders[ "To" ] + e"\r\n"
|
||||
ENDIF
|
||||
IF "Subject" $ ::hHeaders
|
||||
cRet+= "Subject: "+ ::hHeaders[ "Subject"] + e"\r\n"
|
||||
cRet += "Subject: "+ ::hHeaders[ "Subject" ] + e"\r\n"
|
||||
ENDIF
|
||||
IF Len( ::aAttachments ) > 0
|
||||
cRet += "Mime-Version:" + ::hHeaders[ "Mime-Version" ] + e"\r\n"
|
||||
ENDIF
|
||||
IF Len( ::aAttachments ) > 0
|
||||
cRet+= "Mime-Version:" + ::hHeaders["Mime-Version"] + e"\r\n"
|
||||
endif
|
||||
|
||||
FOR i := 1 TO Len( ::hHeaders )
|
||||
cElem := Lower(hb_HKeyAt( ::hHeaders, i ))
|
||||
@@ -354,8 +354,8 @@ METHOD ToString() CLASS TipMail
|
||||
//Body
|
||||
IF .not. Empty( ::cBody )
|
||||
IF empty(::aAttachments)
|
||||
//cRet += ::cBody +if(lAttachment,'', e"\r\n")
|
||||
cRet += ::cBody + if(::lBodyEncoded,'', e"\r\n")
|
||||
//cRet += ::cBody +iif(lAttachment,"", e"\r\n")
|
||||
cRet += ::cBody + iif(::lBodyEncoded,"", e"\r\n")
|
||||
else
|
||||
//GD - if there are attachements the body of the message has to be treated as an attachment.
|
||||
cRet += "--" + cBoundary + e"\r\n"
|
||||
@@ -438,7 +438,7 @@ METHOD FromString( cMail, cBoundary, nPos ) CLASS TipMail
|
||||
// boundary.
|
||||
|
||||
IF "Content-Transfer-Encoding" $ ::hHeaders
|
||||
::oEncoder := TIp_GetEncoder( ::hHeaders["Content-Transfer-Encoding"] )
|
||||
::oEncoder := TIp_GetEncoder( ::hHeaders[ "Content-Transfer-Encoding" ] )
|
||||
ENDIF
|
||||
|
||||
// se if we have subparts:
|
||||
@@ -534,11 +534,11 @@ RETURN cBound
|
||||
METHOD setHeader( cSubject, cFrom, cTo, cCC, cBCC ) CLASS TipMail
|
||||
LOCAL aTo, aCC, aBCC, i, imax
|
||||
|
||||
IF Valtype( csubject ) <> "C"
|
||||
IF !( Valtype( csubject ) == "C" )
|
||||
cSubject := ""
|
||||
ENDIF
|
||||
|
||||
IF Valtype( cFrom ) <> "C"
|
||||
IF !( Valtype( cFrom ) == "C" )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
@@ -582,7 +582,7 @@ METHOD setHeader( cSubject, cFrom, cTo, cCC, cBCC ) CLASS TipMail
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
IF aCC <> NIL
|
||||
IF aCC != NIL
|
||||
cCC := aCC[1]
|
||||
imax := Len( aCC )
|
||||
FOR i:=2 TO imax
|
||||
@@ -594,7 +594,7 @@ METHOD setHeader( cSubject, cFrom, cTo, cCC, cBCC ) CLASS TipMail
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF aBCC <> NIL
|
||||
IF aBCC != NIL
|
||||
cBCC := aBCC[1]
|
||||
imax := Len( aBCC )
|
||||
FOR i:=2 TO imax
|
||||
@@ -638,7 +638,7 @@ METHOD detachFile( cPath ) CLASS TipMail
|
||||
LOCAL cDelim := HB_OsPathSeparator()
|
||||
LOCAL nFileHandle
|
||||
|
||||
IF EMpty( cFileName )
|
||||
IF Empty( cFileName )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
@@ -647,22 +647,22 @@ METHOD detachFile( cPath ) CLASS TipMail
|
||||
ENDIF
|
||||
|
||||
nFileHandle := FCreate( cFileName )
|
||||
IF FError() <> 0
|
||||
IF FError() != 0
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
FWrite( nFileHandle, cContent )
|
||||
|
||||
FClose( nFileHandle )
|
||||
RETURN ( FError() == 0 )
|
||||
RETURN FError() == 0
|
||||
|
||||
|
||||
METHOD getFileName() CLASS TipMail
|
||||
RETURN StrTran( ::getFieldOption( "Content-Type", "name" ), '"', '' )
|
||||
RETURN StrTran( ::getFieldOption( "Content-Type", "name" ), '"', "" )
|
||||
|
||||
|
||||
METHOD isMultiPart CLASS TipMail
|
||||
RETURN ( "multipart/" $ Lower( ::GetFieldPart("Content-Type")) )
|
||||
RETURN "multipart/" $ Lower( ::GetFieldPart("Content-Type"))
|
||||
|
||||
|
||||
METHOD getMultiParts( aParts ) CLASS TipMail
|
||||
@@ -674,7 +674,7 @@ METHOD getMultiParts( aParts ) CLASS TipMail
|
||||
aParts := {}
|
||||
ENDIF
|
||||
|
||||
DO WHILE ( oSubPart := ::nextAttachment() ) <> NIL
|
||||
DO WHILE ( oSubPart := ::nextAttachment() ) != NIL
|
||||
lReset := .T.
|
||||
AAdd( aParts, oSubPart )
|
||||
IF oSubPart:countAttachments() > 0
|
||||
|
||||
@@ -133,7 +133,7 @@ METHOD GetOk() CLASS tIPClientPOP
|
||||
LOCAL nLen
|
||||
|
||||
::cReply := ::InetRecvLine( ::SocketCon, @nLen, 128 )
|
||||
IF ::InetErrorCode( ::SocketCon ) != 0 .or. !( SubStr( ::cReply, 1, 1 ) == '+' )
|
||||
IF ::InetErrorCode( ::SocketCon ) != 0 .or. !( SubStr( ::cReply, 1, 1 ) == "+" )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
@@ -318,7 +318,7 @@ METHOD Retrieve( nId, nLen ) CLASS tIPClientPOP
|
||||
otherwise if response breaks EOM in two, it will never
|
||||
be found
|
||||
*/
|
||||
IF ( nPos := hb_At( cEOM, cRet, Max( nRetLen - Len( cEOM ), 1 ) ) ) <> 0
|
||||
IF ( nPos := hb_At( cEOM, cRet, Max( nRetLen - Len( cEOM ), 1 ) ) ) != 0
|
||||
// Remove ".CRLF"
|
||||
cRet := Left( cRet, nPos + 1 )
|
||||
::bEof := .T.
|
||||
@@ -337,7 +337,7 @@ METHOD Retrieve( nId, nLen ) CLASS tIPClientPOP
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
|
||||
// Remove byte-stuffed termination octet(s) if any
|
||||
// Remove byte-stuffed termination octet(s) if any
|
||||
RETURN StrTran( cRet, ::cCRLF + "..", ::cCRLF + "." )
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@ METHOD countMail CLASS TIpClientPop
|
||||
LOCAL aMails
|
||||
IF ::isOpen
|
||||
::reset()
|
||||
aMails := HB_ATokens( StrTran( ::list(), Chr(13),''), Chr(10) )
|
||||
aMails := HB_ATokens( StrTran( ::list(), Chr(13),""), Chr(10) )
|
||||
RETURN Len( aMails )
|
||||
ENDIF
|
||||
RETURN -1
|
||||
@@ -361,7 +361,7 @@ RETURN -1
|
||||
METHOD retrieveAll( lDelete )
|
||||
LOCAL aMails, i, imax, cMail
|
||||
|
||||
IF Valtype( lDelete ) <> "L"
|
||||
IF !( Valtype( lDelete ) == "L" )
|
||||
lDelete := .F.
|
||||
ENDIF
|
||||
|
||||
@@ -384,4 +384,4 @@ METHOD retrieveAll( lDelete )
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
RETURN aMails
|
||||
RETURN aMails
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
#translate ( <exp1> LIKE <exp2> ) => ( HB_REGEXLIKE( (<exp2>), (<exp1>) ) )
|
||||
|
||||
FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aFiles, cUser, cPass, cPopServer, nPriority, lRead, lTrace, lPopAuth, lNoAuth, nTimeOut)
|
||||
FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aFiles, cUser, cPass, cPopServer, nPriority, lRead, lTrace, lPopAuth, lNoAuth, nTimeOut, cReplyTo )
|
||||
/*
|
||||
cServer -> Required. IP or domain name of the mail server
|
||||
nPort -> Optional. Port used my email server
|
||||
@@ -75,6 +75,7 @@ FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aF
|
||||
lTrace -> Optional. If set to .T., a log file is created (sendmail<nNr>.log). Standard setting is .F.
|
||||
lNoAuth -> Optional. Disable Autentication methods
|
||||
nTimeOut -> Optional. Number os ms to wait default 20000 (20s)
|
||||
cReplyTo -> Optional.
|
||||
*/
|
||||
|
||||
LOCAL oInMail, cBodyTemp, oUrl, oMail, oAttach, aThisFile, cFile, cFname, cFext, cData, oUrl1
|
||||
@@ -91,6 +92,7 @@ FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aF
|
||||
LOCAL lAuthPlain := .F.
|
||||
LOCAL lConnect := .T.
|
||||
LOCAL oPop
|
||||
|
||||
DEFAULT cUser TO ""
|
||||
DEFAULT cPass TO ""
|
||||
DEFAULT nPort TO 25
|
||||
@@ -98,9 +100,10 @@ FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aF
|
||||
DEFAULT nPriority TO 3
|
||||
DEFAULT lRead TO .F.
|
||||
DEFAULT lTrace TO .F.
|
||||
DEFAULT lPopAuth to .T.
|
||||
DEFAULT lNoAuth TO .F.
|
||||
DEFAULT nTimeOut to 100
|
||||
DEFAULT lPopAuth TO .T.
|
||||
DEFAULT lNoAuth TO .F.
|
||||
DEFAULT nTimeOut TO 100
|
||||
DEFAULT cReplyTo TO ""
|
||||
|
||||
cUser := StrTran( cUser, "@", "&at;" )
|
||||
|
||||
@@ -175,9 +178,9 @@ FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aF
|
||||
ENDIF
|
||||
|
||||
BEGIN SEQUENCE
|
||||
oUrl := tUrl():New( "smtp://" + cUser + "@" + cServer + '/' + cTo )
|
||||
oUrl := tUrl():New( "smtp://" + cUser + "@" + cServer + "/" + cTo )
|
||||
RECOVER
|
||||
lReturn := .F.
|
||||
lReturn := .F.
|
||||
END
|
||||
|
||||
IF !lReturn
|
||||
@@ -203,7 +206,7 @@ FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aF
|
||||
|
||||
oAttach:SetBody( cBody )
|
||||
oMail:Attach( oAttach )
|
||||
oUrl:cFile := cTo + If( Empty(cCC), "", "," + cCC ) + If( Empty(cBCC), "", "," + cBCC)
|
||||
oUrl:cFile := cTo + iif( Empty(cCC), "", "," + cCC ) + iif( Empty(cBCC), "", "," + cBCC)
|
||||
|
||||
oMail:hHeaders[ "Date" ] := tip_Timestamp()
|
||||
oMail:hHeaders[ "From" ] := cFrom
|
||||
@@ -214,6 +217,9 @@ FUNCTION HB_SendMail( cServer, nPort, cFrom, aTo, aCC, aBCC, cBody, cSubject, aF
|
||||
IF !Empty(cBCC)
|
||||
oMail:hHeaders[ "Bcc" ] := cBCC
|
||||
ENDIF
|
||||
IF !Empty(cReplyTo)
|
||||
oMail:hHeaders[ "Reply-To" ] := cReplyTo
|
||||
ENDIF
|
||||
|
||||
BEGIN SEQUENCE
|
||||
oInmail := tIPClientSMTP():New( oUrl, lTrace)
|
||||
|
||||
@@ -126,7 +126,7 @@ FUNCTION TIP_CHECKSID( cSID, cCRCKey )
|
||||
cSIDCRC += SubStr( cCRCKey, Val( SubStr( cTemp, n, 1 ) ) + 1, 1 )
|
||||
next
|
||||
|
||||
RETURN ( Right( cSID, 5 ) == cSIDCRC )
|
||||
RETURN Right( cSID, 5 ) == cSIDCRC
|
||||
|
||||
FUNCTION TIP_DATETOGMT( dDate, cTime )
|
||||
LOCAL cStr := ""
|
||||
|
||||
@@ -126,7 +126,7 @@ METHOD GetOk() CLASS tIPClientSMTP
|
||||
LOCAL nLen
|
||||
|
||||
::cReply := ::InetRecvLine( ::SocketCon, @nLen, 512 )
|
||||
IF ::InetErrorCode( ::SocketCon ) != 0 .or. Substr( ::cReply, 1, 1 ) == '5'
|
||||
IF ::InetErrorCode( ::SocketCon ) != 0 .or. Substr( ::cReply, 1, 1 ) == "5"
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
@@ -193,14 +193,14 @@ RETURN ::getOk()
|
||||
|
||||
METHOD AUTH( cUser, cPass) CLASS tIPClientSMTP
|
||||
|
||||
Local cs:=''
|
||||
Local cs:=""
|
||||
Local cEncodedUser
|
||||
Local cEncodedPAss
|
||||
|
||||
cUser := StrTran( cUser,"&at;", "@")
|
||||
|
||||
cEncodedUser := alltrim(HB_BASE64(cuser,len(cuser)))
|
||||
cEncodedPAss :=alltrim(HB_BASE64(cPass,len(cpass)))
|
||||
cEncodedPAss := alltrim(HB_BASE64(cPass,len(cpass)))
|
||||
|
||||
|
||||
::InetSendall( ::SocketCon, "AUTH LOGIN" +::ccrlf )
|
||||
@@ -212,7 +212,7 @@ METHOD AUTH( cUser, cPass) CLASS tIPClientSMTP
|
||||
endif
|
||||
endif
|
||||
|
||||
return ( ::isAuth := ::GetOk() )
|
||||
return ::isAuth := ::GetOk()
|
||||
|
||||
METHOD AuthPlain( cUser, cPass) CLASS tIPClientSMTP
|
||||
|
||||
@@ -220,7 +220,7 @@ METHOD AuthPlain( cUser, cPass) CLASS tIPClientSMTP
|
||||
Local cen := HB_BASE64( cBase, 2 + Len( cUser ) + Len( cPass ) )
|
||||
|
||||
::InetSendall( ::SocketCon, "AUTH PLAIN" + cen + ::cCrlf)
|
||||
return ( ::isAuth := ::GetOk() )
|
||||
return ::isAuth := ::GetOk()
|
||||
|
||||
|
||||
METHOD Write( cData, nLen, bCommit ) CLASS tIPClientSMTP
|
||||
@@ -304,4 +304,3 @@ METHOD sendMail( oTIpMail ) CLASS TIpClientSmtp
|
||||
NEXT
|
||||
|
||||
RETURN ::data( oTIpMail:toString() )
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ METHOD new( cHtmlString ) CLASS THtmlDocument
|
||||
' </body>' + hb_OSNewLine() +;
|
||||
'</html>'
|
||||
|
||||
IF Valtype( cHtmlString ) <> "C"
|
||||
IF !( Valtype( cHtmlString ) == "C" )
|
||||
::root := THtmlNode():new( cEmptyHtmlDoc )
|
||||
ELSE
|
||||
IF .NOT. "<html" $ Lower( Left( cHtmlString, 4096 ) )
|
||||
@@ -245,14 +245,14 @@ METHOD writeFile( cFileName ) CLASS THtmlDocument
|
||||
LOCAL cHtml := ::toString()
|
||||
LOCAL nFileHandle := FCreate( cFileName )
|
||||
|
||||
IF FError() <> 0
|
||||
IF FError() != 0
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
FWrite( nFileHandle, cHtml, Len(cHtml) )
|
||||
FClose( nFileHandle )
|
||||
::changed := .F.
|
||||
RETURN ( FError()==0 )
|
||||
RETURN FError() == 0
|
||||
|
||||
|
||||
// builds a one dimensional array of all nodes contained in the HTML document
|
||||
@@ -450,14 +450,15 @@ METHOD MatchCriteria( oFound ) CLASS THtmlIteratorScan
|
||||
|
||||
IF ::cValue != NIL
|
||||
xData := oFound:getAttributes()
|
||||
IF hb_HScan( xData, {| xKey,cValue| HB_SYMBOL_UNUSED(xKey), Lower(::cValue) == Lower(cValue) }) == 0
|
||||
IF hb_HScan( xData, {| xKey, cValue | HB_SYMBOL_UNUSED(xKey), Lower(::cValue) == Lower(cValue) }) == 0
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF ::cData != NIL
|
||||
xData := oFound:getText(" ")
|
||||
IF Empty(xData) .OR. ( Alltrim(::cData) <> Alltrim(xData) )
|
||||
/* NOTE: != changed to !( == ) */
|
||||
IF Empty(xData) .OR. !( Alltrim(::cData) == Alltrim(xData) )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
ENDIF
|
||||
@@ -663,7 +664,7 @@ RETURN hb_bitAnd( ::htmlTagType[2], CM_OPT ) > 0
|
||||
|
||||
// checks if this is a node (leafs contain no further nodes, e.g. <br>,<hr>,_text_)
|
||||
METHOD isNode CLASS THtmlNode
|
||||
RETURN ( Valtype( ::htmlContent ) == "A" .AND. Len( ::htmlContent ) > 0 )
|
||||
RETURN Valtype( ::htmlContent ) == "A" .AND. Len( ::htmlContent ) > 0
|
||||
|
||||
|
||||
// checks if this is a block node that must be closed with an ending tag: eg: <table></table>, <ul></ul>
|
||||
@@ -704,10 +705,10 @@ METHOD parseHtml( parser ) CLASS THtmlNode
|
||||
// ending tag of previous node
|
||||
cText := Lower( Alltrim( SubStr( CutStr( ">", @cText ), 3 ) ) )
|
||||
oLastTag := oThisTag:parent
|
||||
DO WHILE oLastTag <> NIL .AND. Lower( oLastTag:htmlTagName ) <> cText
|
||||
DO WHILE oLastTag != NIL .AND. !( Lower( oLastTag:htmlTagName ) == cText ) /* NOTE: != changed to !( == ) */
|
||||
oLastTag := oLastTag:parent
|
||||
ENDDO
|
||||
IF oLastTag <> NIL
|
||||
IF oLastTag != NIL
|
||||
oLastTag:htmlEndTagName := "/" + oLastTag:htmlTagName
|
||||
ENDIF
|
||||
|
||||
@@ -743,7 +744,7 @@ METHOD parseHtml( parser ) CLASS THtmlNode
|
||||
ELSE
|
||||
|
||||
oNextTag := oThisTag:parent
|
||||
DO WHILE oNextTag <> NIL .AND. Lower( oNextTag:htmlTagName ) <> Lower( SubStr(cTagName,2) )
|
||||
DO WHILE oNextTag != NIL .AND. !( Lower( oNextTag:htmlTagName ) == Lower( SubStr(cTagName,2) ) ) /* NOTE: != changed to !( == ) */
|
||||
oNextTag := oNextTag:parent
|
||||
ENDDO
|
||||
|
||||
@@ -858,7 +859,7 @@ METHOD parseHtmlFixed( parser ) CLASS THtmlNode
|
||||
ENDIF
|
||||
|
||||
// back to "<"
|
||||
DO WHILE P_PREV( parser ) <> "<" ; ENDDO
|
||||
DO WHILE !( P_PREV( parser ) == "<" ) ; ENDDO /* NOTE: != changed to !( == ) */
|
||||
|
||||
nEnd := parser:p_pos
|
||||
::addNode( THtmlNode():new( self, "_text_", , SubStr( parser:p_Str, nStart, nEnd - nStart ) ) )
|
||||
@@ -870,7 +871,7 @@ RETURN self
|
||||
|
||||
// adds a new CHILD node to the current one
|
||||
METHOD addNode( oTHtmlNode ) CLASS THtmlNode
|
||||
IF oTHtmlNode:parent <> NIL .AND. .NOT. oTHtmlNode:parent == self
|
||||
IF oTHtmlNode:parent != NIL .AND. .NOT. oTHtmlNode:parent == self
|
||||
oTHtmlNode:delete()
|
||||
ENDIF
|
||||
|
||||
@@ -879,7 +880,7 @@ METHOD addNode( oTHtmlNode ) CLASS THtmlNode
|
||||
|
||||
AAdd( ::htmlContent, oTHtmlNode )
|
||||
|
||||
IF ::root <> NIL .AND. ::root:_document <> NIL
|
||||
IF ::root != NIL .AND. ::root:_document != NIL
|
||||
::root:_document:changed := .T.
|
||||
ENDIF
|
||||
|
||||
@@ -892,14 +893,14 @@ METHOD insertBefore( oTHtmlNode ) CLASS THtmlNode
|
||||
RETURN ::error( "Cannot insert before root node", ::className(), ":insertBefore()", EG_ARG, HB_AParams() )
|
||||
ENDIF
|
||||
|
||||
IF oTHtmlNode:parent <> NIL .AND. .NOT. oTHtmlNode:parent == self
|
||||
IF oTHtmlNode:parent != NIL .AND. .NOT. oTHtmlNode:parent == self
|
||||
oTHtmlNode:delete()
|
||||
ENDIF
|
||||
|
||||
oTHtmlNode:parent := ::parent
|
||||
oTHtmlNode:root := ::root
|
||||
|
||||
IF ::root <> NIL .AND. ::root:_document <> NIL
|
||||
IF ::root != NIL .AND. ::root:_document != NIL
|
||||
::root:_document:changed := .T.
|
||||
ENDIF
|
||||
|
||||
@@ -913,14 +914,14 @@ RETURN oTHtmlNode
|
||||
METHOD insertAfter( oTHtmlNode ) CLASS THtmlNode
|
||||
LOCAL nPos
|
||||
|
||||
IF oTHtmlNode:parent <> NIL .AND. .NOT. oTHtmlNode:parent == self
|
||||
IF oTHtmlNode:parent != NIL .AND. .NOT. oTHtmlNode:parent == self
|
||||
oTHtmlNode:delete()
|
||||
ENDIF
|
||||
|
||||
oTHtmlNode:parent := ::parent
|
||||
oTHtmlNode:root := ::root
|
||||
|
||||
IF ::root <> NIL .AND. ::root:_document <> NIL
|
||||
IF ::root != NIL .AND. ::root:_document != NIL
|
||||
::root:_document:changed := .T.
|
||||
ENDIF
|
||||
|
||||
@@ -942,7 +943,7 @@ METHOD delete() CLASS THtmlNode
|
||||
RETURN self
|
||||
ENDIF
|
||||
|
||||
IF ::root <> NIL .AND. ::root:_document <> NIL
|
||||
IF ::root != NIL .AND. ::root:_document != NIL
|
||||
::root:_document:changed := .T.
|
||||
ENDIF
|
||||
|
||||
@@ -958,7 +959,7 @@ RETURN self
|
||||
|
||||
// returns first node in subtree (.F.) or first node of entire tree (.T.)
|
||||
METHOD firstNode( lRoot ) CLASS THtmlNode
|
||||
IF Valtype( lRoot ) <> "L"
|
||||
IF !( Valtype( lRoot ) == "L" )
|
||||
lRoot := .F.
|
||||
ENDIF
|
||||
|
||||
@@ -974,7 +975,7 @@ RETURN IIF( Empty(::htmlContent), NIL, ::htmlContent[1] )
|
||||
// returns last node in subtree (.F.) or last node of entire tree (.T.)
|
||||
METHOD lastNode( lRoot ) CLASS THtmlNode
|
||||
LOCAL aNodes
|
||||
IF Valtype( lRoot ) <> "L"
|
||||
IF !( Valtype( lRoot ) == "L" )
|
||||
lRoot := .F.
|
||||
ENDIF
|
||||
IF ::htmlTagName == "_text_"
|
||||
@@ -992,7 +993,8 @@ METHOD nextNode() CLASS THtmlNode
|
||||
RETURN ::htmlContent[1]
|
||||
ENDIF
|
||||
|
||||
IF ::htmlTagName <> "_text_" .AND. .NOT. Empty( ::htmlContent )
|
||||
/* NOTE: != changed to !( == ) */
|
||||
IF !( ::htmlTagName == "_text_" ) .AND. .NOT. Empty( ::htmlContent )
|
||||
RETURN ::htmlContent[1]
|
||||
ENDIF
|
||||
|
||||
@@ -1073,11 +1075,11 @@ METHOD toString( nIndent ) CLASS THtmlNode
|
||||
cHtml += ::htmlContent
|
||||
ENDIF
|
||||
|
||||
IF ::htmlEndTagName <> NIL
|
||||
IF ::htmlEndTagName != NIL
|
||||
IF ::isInline() .OR. ::keepFormatting() .OR. ::isType( CM_HEADING ) .OR. ::isType( CM_HEAD )
|
||||
RETURN cHtml += IIf( ::htmlEndTagName == "/", " />", "<" + ::htmlEndTagName + ">" )
|
||||
ENDIF
|
||||
IF Right( cHtml, 1 ) <> Chr(10)
|
||||
IF !( Right( cHtml, 1 ) == Chr(10) )
|
||||
cHtml += Chr(13)+Chr(10)
|
||||
ENDIF
|
||||
RETURN cHtml += cIndent + IIf( ::htmlEndTagName == "/", " />", "<" + ::htmlEndTagName + ">" )
|
||||
@@ -1221,7 +1223,7 @@ METHOD getAttribute( cName ) CLASS THtmlNode
|
||||
LOCAL hHash := ::getAttributes()
|
||||
LOCAL cValue
|
||||
|
||||
IF Valtype( hHash ) <> "H"
|
||||
IF !( Valtype( hHash ) == "H" )
|
||||
RETURN hHash
|
||||
ENDIF
|
||||
|
||||
@@ -1363,7 +1365,7 @@ METHOD setAttribute( cName, cValue ) CLASS THtmlNode
|
||||
LOCAL nType
|
||||
LOCAL hHash := ::getAttributes()
|
||||
|
||||
IF Valtype( hHash ) <> "H"
|
||||
IF !( Valtype( hHash ) == "H" )
|
||||
// Tag doesn't have any attribute
|
||||
RETURN ::error( "Invalid HTML attribute for: <" + ::htmlTagName + ">", ::className(), cName, EG_ARG, {cName, cValue} )
|
||||
ENDIF
|
||||
@@ -1399,7 +1401,7 @@ RETURN ::getAttributes()
|
||||
METHOD delAttribute( cName ) CLASS THtmlNode
|
||||
LOCAL xVal := ::getAttribute( cName )
|
||||
LOCAL lRet := .F.
|
||||
IF xVal <> NIL
|
||||
IF xVal != NIL
|
||||
BEGIN SEQUENCE WITH {|oErr| Break( oErr )}
|
||||
hb_HDel( ::htmlAttributes, cName )
|
||||
lRet := .T.
|
||||
@@ -1636,7 +1638,7 @@ FUNCTION THtmlIsValid( cTagName, cAttrName )
|
||||
|
||||
BEGIN SEQUENCE WITH {|oErr| Break( oErr )}
|
||||
aValue := shTagTypes[ cTagName ]
|
||||
IF cAttrName <> NIL
|
||||
IF cAttrName != NIL
|
||||
aValue := HB_Exec( aValue[1] )
|
||||
lRet := ( Ascan( aValue, {|a| Lower(a[1]) == Lower( cAttrName ) } ) > 0 )
|
||||
ENDIF
|
||||
|
||||
@@ -114,7 +114,7 @@ METHOD SetAddress( cUrl ) CLASS tURL
|
||||
// TOPLEVEL url parsing
|
||||
aMatch:= HB_Regex( ::cREuri, cUrl )
|
||||
|
||||
//May fail
|
||||
// May fail
|
||||
IF Empty( aMatch )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
@@ -200,7 +200,7 @@ METHOD BuildQuery( ) CLASS tURL
|
||||
RETURN cLine
|
||||
|
||||
METHOD AddGetForm( cPostData )
|
||||
LOCAL cData:='', nI, cTmp,y, cRet
|
||||
LOCAL cData:="", nI, cTmp,y, cRet
|
||||
|
||||
IF HB_IsHash( cPostData )
|
||||
FOR nI := 1 TO Len( cPostData )
|
||||
@@ -239,7 +239,7 @@ METHOD AddGetForm( cPostData )
|
||||
ENDIF
|
||||
|
||||
IF !empty(cData)
|
||||
cRet := ::cQuery+=if(empty(::cQuery),'','&')+cData
|
||||
cRet := ::cQuery += iif(empty(::cQuery),"","&") + cData
|
||||
ENDIF
|
||||
|
||||
RETURN cRet
|
||||
|
||||
Reference in New Issue
Block a user