From 38e871bcfa4511748fe66c05f4491b304cde0580 Mon Sep 17 00:00:00 2001 From: Noldor Date: Sun, 28 Sep 2008 13:29:37 +0000 Subject: 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 --- src/modules/objects/class_file.cpp | 49 ++++++++++--------- src/modules/objects/class_http.cpp | 44 +++++++++-------- src/modules/objects/class_http.h | 2 +- src/modules/objects/class_socket.cpp | 73 +++++++++++++++-------------- src/modules/objects/class_widget.cpp | 1 - src/modules/objects/objects_QT4_vc05.vcproj | 31 +++++++++++- 6 files changed, 116 insertions(+), 84 deletions(-) (limited to 'src/modules/objects') 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;igetChar((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='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: $post(,,) !fn: $abort() !fn: $setHost(,) + !fn: $currentId() !fn: $setProxy(,[,]) !fn: $setUser(,) !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 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;ilen() > 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;ireturnValue()->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 @@ /> + + + + + + + + +