aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects
diff options
context:
space:
mode:
authorGravatar Noldor2008-09-28 13:29:37 +0000
committerGravatar Noldor2008-09-28 13:29:37 +0000
commit38e871bcfa4511748fe66c05f4491b304cde0580 (patch)
tree52a823b9c4d1d51a68d41e470f80b6887d44c562 /src/modules/objects
parentadded doxygen comments; (diff)
downloadKVIrc-38e871bcfa4511748fe66c05f4491b304cde0580.tar.gz
KVIrc-38e871bcfa4511748fe66c05f4491b304cde0580.tar.bz2
KVIrc-38e871bcfa4511748fe66c05f4491b304cde0580.zip
some fixes + optimized readhex functions in kvs classes socket and file
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2587 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/objects')
-rw-r--r--src/modules/objects/class_file.cpp49
-rw-r--r--src/modules/objects/class_http.cpp44
-rw-r--r--src/modules/objects/class_http.h2
-rw-r--r--src/modules/objects/class_socket.cpp73
-rw-r--r--src/modules/objects/class_widget.cpp1
-rw-r--r--src/modules/objects/objects_QT4_vc05.vcproj31
6 files changed, 116 insertions, 84 deletions
diff --git a/src/modules/objects/class_file.cpp b/src/modules/objects/class_file.cpp
index 81dc6951f..5286d6414 100644
--- a/src/modules/objects/class_file.cpp
+++ b/src/modules/objects/class_file.cpp
@@ -180,10 +180,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_file,"file","object")
KVSO_REGISTER_HANDLER(KviKvsObject_file,"writeBlock", functionwriteBlock)
KVSO_REGISTER_HANDLER(KviKvsObject_file,"readLine", functionreadLine)
KVSO_REGISTER_HANDLER(KviKvsObject_file,"writeLine", functionwriteLine)
-/* KVSO_REGISTER_HANDLER(KviKvsObject_file,"hexWrite", functionHexWrite)
- KVSO_REGISTER_HANDLER(KviKvsObject_file,"hexRead", functionHexRead)
-*/
- KVSO_END_REGISTERCLASS(KviKvsObject_file)
+KVSO_END_REGISTERCLASS(KviKvsObject_file)
KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_file,KviKvsObject)
m_pFile = new QFile();
@@ -417,6 +414,7 @@ bool KviKvsObject_file::functionwriteLine(KviKvsObjectFunctionCall *c)
}
bool KviKvsObject_file::functionreadHexBlock(KviKvsObjectFunctionCall *c)
{
+ unsigned char hex[]="000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C6C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5F6F7F8F9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF";
kvs_uint_t uLen;
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("lenght",KVS_PT_UNSIGNEDINTEGER,0,uLen)
@@ -427,27 +425,21 @@ bool KviKvsObject_file::functionreadHexBlock(KviKvsObjectFunctionCall *c)
else
{
if (uLen>m_pFile->size()) uLen=m_pFile->size();
- char * buff = new char[(uLen*2) + 1];
- char * cc=buff;
+ char * buff = new char[uLen];
+ char * str = new char [(uLen*2)+1];
m_pFile->flush(); // advice from QFile man page (to avoid trash)
int rlen = m_pFile->read(buff, uLen);
- QString szHex;
- unsigned char byte,msb,lsb=0;
int index=0;
- for (int i=0;i<uLen;i++)
+ for (int i=0;i<rlen;i++)
{
- m_pFile->getChar((char*)&byte);
- msb=(byte/16);
- lsb=(byte%16);
- msb>9?msb+='7':msb+='0';
- lsb>9?lsb+='7':lsb+='0';
- buff[index]=msb;
- index++;
- buff[index]=lsb;
- index++;
+ unsigned int byte=(unsigned char)buff[i]*2;
+ str[index++]=hex[byte++];
+ str[index++]=hex[byte];
}
- buff[index]='\0';
- c->returnValue()->setString(buff);
+ str[index]='\0';
+ c->returnValue()->setString(str);
+ delete str;
+ delete buff;
}
return true;
}
@@ -464,15 +456,28 @@ bool KviKvsObject_file::functionwriteHexBlock(KviKvsObjectFunctionCall *c)
c->warning(__tr2qs("File is not open !"));
return true;
}
+ if (szBlock.length()%2)
+ {
+ c->warning(__tr2qs("Lenght of hex string is not multiple of 2"));
+ return true;
+ }
if (uLen>(szBlock.length()/2)|| !uLen) uLen=szBlock.length();
else uLen*=2;
unsigned char byte,lsb,msb;
for(int i=0;i<uLen;i+=2)
{
msb=szBlock.at(i).toAscii();
- msb>='A'?msb-='7':msb-='0';
lsb=szBlock.at(i+1).toAscii();
- lsb>='A'?lsb-='7':lsb-='0';
+
+ if (((msb>='A' && msb<='F')||(msb>='0' && msb<='9')) && ((lsb>='A' && lsb<='F')|| (lsb>='0' && lsb<='9')))
+ {
+ msb>='A'?msb-='7':msb-='0';
+ lsb>='A'?lsb-='7':lsb-='0';
+ }
+ else{
+ c->warning("The hex string is not correct!");
+ return true;
+ }
byte=(msb*16)+lsb;
m_pFile->putChar(byte);
}
diff --git a/src/modules/objects/class_http.cpp b/src/modules/objects/class_http.cpp
index a62b339b8..036a0d27d 100644
--- a/src/modules/objects/class_http.cpp
+++ b/src/modules/objects/class_http.cpp
@@ -80,6 +80,7 @@ const char * const ssl_errors_tbl[] = {
!fn: <id:integer>$post(<remote_path:string>,<post_data:string>,<local_file: string>)
!fn: $abort()
!fn: <id:integer>$setHost(<host:string>,<remote_port:unsigned_integer>)
+ !fn: <id:integer>$currentId()
!fn: $setProxy(<host:string>,[<user:string>,<password:string>])
!fn: $setUser(<user:string>,<password:string>)
!fn: $readAll()
@@ -115,14 +116,12 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_http,"http","object")
KVSO_REGISTER_HANDLER(KviKvsObject_http,"abort",functionAbort)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"setHost",functionSetHost)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"setProxy",functionSetProxy)
+ KVSO_REGISTER_HANDLER(KviKvsObject_http,"currentId",functionCurrentId)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"setUser",functionSetUser)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"readAll",functionReadAll)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"errorString",functionErrorString)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"setFollowRedirect",functionFollowRedirect)
- #ifndef QT_NO_OPENSSL
- KVSO_REGISTER_HANDLER(KviKvsObject_http,"ignoreSSlErrors",functionIgnoreSslErrors)
- #endif
// events
KVSO_REGISTER_HANDLER(KviKvsObject_http,"doneEvent",functionDoneEvent)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"requestFinishedEvent",functionRequestFinishedEvent)
@@ -132,10 +131,10 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_http,"http","object")
KVSO_REGISTER_HANDLER(KviKvsObject_http,"dataSendProgressEvent",functionDataSendProgressEvent)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"stateChangedEvent",functionStateChangedEvent)
KVSO_REGISTER_HANDLER(KviKvsObject_http,"readyReadEvent",functionReadyReadEvent)
- #ifndef QT_NO_OPENSSL
-
+ #ifndef QT_NO_OPENSSL
KVSO_REGISTER_HANDLER(KviKvsObject_http,"sslErrorsEvent",functionSslErrorsEvent)
-#endif
+ KVSO_REGISTER_HANDLER(KviKvsObject_http,"ignoreSSlErrors",functionIgnoreSslErrors)
+ #endif
KVSO_END_REGISTERCLASS(KviKvsObject_http)
@@ -160,20 +159,8 @@ KVSO_END_CONSTRUCTOR(KviKvsObject_http)
KVSO_BEGIN_DESTRUCTOR(KviKvsObject_http)
QHashIterator<int,QFile *> t(getDict);
-/*
-
- while (t.hasNext())
- {
- t.next();
- int key=t.key();
- QFile *pFile=getDict.value(key);
- pFile->close();
- delete pFile;
- }
-*/
delete m_pHttp;
getDict.clear();
-
KVSO_END_DESTRUCTOR(KviKvsObject_http)
//----------------------
@@ -188,7 +175,6 @@ bool KviKvsObject_http::functionSetHost(KviKvsObjectFunctionCall *c)
KVSO_PARAMETER("remote_port",KVS_PT_UNSIGNEDINTEGER,KVS_PF_OPTIONAL,uRemotePort)
KVSO_PARAMETERS_END(c)
QUrl url(szHost);
-
if (!url.isValid())
{
c->warning(__tr2qs("Host '%Q' is not a valid url"),&szHost);
@@ -205,6 +191,11 @@ bool KviKvsObject_http::functionSetHost(KviKvsObjectFunctionCall *c)
c->returnValue()->setInteger(id);
return true;
}
+bool KviKvsObject_http::functionCurrentId(KviKvsObjectFunctionCall *c)
+{
+ c->returnValue()->setInteger(m_pHttp->currentId());
+ return true;
+}
bool KviKvsObject_http::functionSetUser(KviKvsObjectFunctionCall *c)
{
QString szUser;
@@ -239,11 +230,20 @@ bool KviKvsObject_http::functionGet(KviKvsObjectFunctionCall *c)
KVSO_PARAMETER("local_filename",KVS_PT_STRING,0,szDest)
KVSO_PARAMETERS_END(c)
QFile *pFile=0;
- if (!szDest.isEmpty()){
+ if (!szDest.isEmpty())
+ {
pFile=new QFile(szDest);
- if (pFile){
+ if (pFile)
+ {
pFile->open(QIODevice::WriteOnly);
}
+ else
+ {
+ c->warning(__tr2qs("'%Q' is not a valid file path"),&szDest);
+ c->returnValue()->setInteger(-1);
+ return true;
+ }
+
}
int id=0;
if (szPath.isEmpty()) szPath="/";
@@ -343,7 +343,6 @@ void KviKvsObject_http::slotRequestFinished ( int id, bool error )
delete pFile;
}
callFunction(this,"requestFinishedEvent",0,new KviKvsVariantList(new KviKvsVariant((kvs_int_t) id),new KviKvsVariant(error)));
-
}
bool KviKvsObject_http::functionRequestStartedEvent(KviKvsObjectFunctionCall *c)
@@ -406,7 +405,6 @@ void KviKvsObject_http::redirect(QString &file,const QHttpResponseHeader &r)
pFile->open(QIODevice::WriteOnly);
int id=m_pHttp->get(url.path(),pFile);
getDict[id]=pFile;
- debug("exit redirect");
}
void KviKvsObject_http::slotResponseHeaderReceived(const QHttpResponseHeader &r)
diff --git a/src/modules/objects/class_http.h b/src/modules/objects/class_http.h
index 7f97f6000..f2667931c 100644
--- a/src/modules/objects/class_http.h
+++ b/src/modules/objects/class_http.h
@@ -63,7 +63,7 @@ protected:
bool functionErrorString(KviKvsObjectFunctionCall *c);
bool functionPost(KviKvsObjectFunctionCall *c);
bool functionFollowRedirect(KviKvsObjectFunctionCall *c);
-
+ bool functionCurrentId(KviKvsObjectFunctionCall *c);
void redirect(QString &file,const QHttpResponseHeader &r);
#ifndef QT_NO_OPENSSL
diff --git a/src/modules/objects/class_socket.cpp b/src/modules/objects/class_socket.cpp
index 5f3856f58..bc572d388 100644
--- a/src/modules/objects/class_socket.cpp
+++ b/src/modules/objects/class_socket.cpp
@@ -330,6 +330,8 @@ KVSO_END_CONSTRUCTOR(KviKvsObject_socket)
KVSO_BEGIN_DESTRUCTOR(KviKvsObject_socket)
delete m_pOutBuffer;
delete m_pFlushTimer;
+ m_pOutBuffer=0;
+ m_pFlushTimer=0;
if(m_pInBuffer)kvi_free(m_pInBuffer);
if(m_pDelayTimer)delete m_pDelayTimer;
@@ -349,6 +351,7 @@ bool KviKvsObject_socket::functionStatus(KviKvsObjectFunctionCall *c)
bool KviKvsObject_socket::functionClose(KviKvsObjectFunctionCall *c)
{
+ if (!m_pOutBuffer) return true;
if((m_pOutBuffer->size() != 0) && (m_iStatus == KVI_SCRIPT_SOCKET_STATUS_CONNECTED))
tryFlush();
@@ -449,39 +452,36 @@ bool KviKvsObject_socket::functionWriteHex(KviKvsObjectFunctionCall *c)
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("hex_string",KVS_PT_STRING,0,m_szHex)
KVSO_PARAMETERS_END(c)
-
- if(m_szHex.length() > 0)
+ if (m_szHex.length()%2)
{
- bool bOk;
- QString szTmp;
- szTmp=m_szHex.setNum(m_szHex.toInt(&bOk,16),16);
- if(szTmp.length()>0)
- {
- KviQCString szData8 = szTmp.toUtf8();
- m_pOutBuffer->append((const unsigned char *)(szData8.data()),szData8.length());
- delayedFlush(0);
- c->returnValue()->setInteger(szData8.length());
- }
+ c->warning(__tr2qs("Lenght of hex string is not multiple 2"));
+ return true;
}
-
- /*
- if(pszData)
+ unsigned char byte,lsb,msb;
+ char * buff = new char[(m_szHex.length()/2) + 1];
+ int index=0;
+ m_szHex.toUpper();
+ for(int i=0;i<m_szHex.length();i+=2)
{
- if(pszData->len() > 0)
+ msb=m_szHex.at(i).toAscii();
+ lsb=m_szHex.at(i+1).toAscii();
+ if (((msb>='A' && msb<='F')||(msb>='0' && msb<='9')) && ((lsb>='A' && lsb<='F')|| (lsb>='0' && lsb<='9')))
{
- char * ptr;
- len = pszData->hexToBuffer(&ptr);
- if(len > 0)
- {
- m_pOutBuffer->append((const unsigned char *)(ptr),len);
- delayedFlush(0);
- KviStr::freeBuffer(ptr);
- }
+ msb>='A'?msb-='7':msb-='0';
+ lsb>='A'?lsb-='7':lsb-='0';
}
+ else{
+ c->warning("The hex string is not correct!");
+ return true;
+ }
+ byte=(msb*16)+lsb;
+ buff[index++]=byte;
}
- buffer.append(KviStr::Format,"%d",len);
-*/
- return true;
+ m_pOutBuffer->append((const unsigned char *)buff,m_szHex.length()/2);
+ delayedFlush(0);
+ c->returnValue()->setInteger(index);
+ delete buff;
+ return true;
}
@@ -1212,17 +1212,20 @@ bool KviKvsObject_socket::functionRead(KviKvsObjectFunctionCall *c)
bool KviKvsObject_socket::functionReadHex(KviKvsObjectFunctionCall *c)
{
- //??? funzioner�
+ unsigned char hex[]="000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C6C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5F6F7F8F9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF";
unsigned int uLen = readGetLength(c);
- bool bOk;
- if(uLen > 0)
+ char * str = new char[(uLen*2) + 1];
+ int index=0;
+ for (int i=0;i<uLen;i++)
{
- QString szTmp;
- szTmp =m_pInBuffer;
- szTmp.toInt(&bOk,16);
- c->returnValue()->setString(szTmp);
- eatInData(uLen);
+ unsigned int byte=(unsigned char)m_pInBuffer[i]*2;
+ str[index++]=hex[byte++];
+ str[index++]=hex[byte];
}
+ str[index]='\0';
+ c->returnValue()->setString(str);
+ eatInData(uLen);
+ delete str;
return true;
}
diff --git a/src/modules/objects/class_widget.cpp b/src/modules/objects/class_widget.cpp
index 89bff4f72..f670ad538 100644
--- a/src/modules/objects/class_widget.cpp
+++ b/src/modules/objects/class_widget.cpp
@@ -1032,7 +1032,6 @@ bool KviKvsObject_widget::function_fontAscent(KviKvsObjectFunctionCall * c)
bool KviKvsObject_widget::function_repaint(KviKvsObjectFunctionCall * c)
{
- bool bEnabled;
if(!widget()) return true;
widget()->repaint();
return true;
diff --git a/src/modules/objects/objects_QT4_vc05.vcproj b/src/modules/objects/objects_QT4_vc05.vcproj
index 8861cebe6..989819623 100644
--- a/src/modules/objects/objects_QT4_vc05.vcproj
+++ b/src/modules/objects/objects_QT4_vc05.vcproj
@@ -63,7 +63,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="qt3support4.lib qtcore4.lib qtgui4.lib qtmain.lib kvilib.lib kvirc.lib qtxml4.lib ws2_32.lib qtwebkit4.lib qtnetwork4.lib"
+ AdditionalDependencies="qtcore4.lib qtgui4.lib qtmain.lib kvilib.lib kvirc.lib qtxml4.lib ws2_32.lib qtwebkit4.lib qtnetwork4.lib"
OutputFile="$(OutDir)/kvi$(ProjectName).dll"
LinkIncremental="2"
AdditionalLibraryDirectories="&quot;$(SSLLIBDIR)&quot;;&quot;$(PERLDIR)\lib\CORE&quot;;&quot;$(QTDIR)\lib&quot;;&quot;$(SolutionDir)\win32build\bin&quot;;&quot;$(ZLIBLIBDIR)&quot;"
@@ -156,7 +156,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="qtmain.lib kvilib.lib kvirc.lib qt3support4.lib qtcore4.lib qtgui4.lib qtxml4.lib ws2_32.lib qtwebkit4.lib"
+ AdditionalDependencies="qtnetwork4.lib qtmain.lib kvilib.lib kvirc.lib qtcore4.lib qtgui4.lib qtxml4.lib ws2_32.lib qtwebkit4.lib"
OutputFile="$(OutDir)/kvi$(ProjectName).dll"
LinkIncremental="1"
AdditionalLibraryDirectories="&quot;$(SSLLIBDIR)&quot;;&quot;$(PERLDIR)\lib\CORE&quot;;&quot;$(QTDIR)\lib&quot;;&quot;$(SolutionDir)\win32build\bin&quot;;&quot;$(ZLIBLIBDIR)&quot;"
@@ -543,6 +543,15 @@
Outputs="$(InputDir)\m_$(InputName).moc"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="$(QTDIR)\bin\moc -o &quot;$(InputDir)\m_$(InputName).moc&quot; &quot;$(InputDir)\$(InputFileName)&quot;"
+ Outputs="$(InputDir)\m_$(InputName).moc"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath=".\class_groupbox.h"
@@ -582,6 +591,15 @@
Outputs="$(InputDir)\m_$(InputName).moc"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="$(QTDIR)\bin\moc -o &quot;$(InputDir)\m_$(InputName).moc&quot; &quot;$(InputDir)\$(InputFileName)&quot;"
+ Outputs="$(InputDir)\m_$(InputName).moc"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath=".\class_label.h"
@@ -1079,6 +1097,15 @@
Outputs="$(InputDir)\m_$(InputName).moc"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="$(QTDIR)\bin\moc -o &quot;$(InputDir)\m_$(InputName).moc&quot; &quot;$(InputDir)\$(InputFileName)&quot;"
+ Outputs="$(InputDir)\m_$(InputName).moc"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath=".\class_treewidgetitem.h"