asynchronous WAP client
| Tue, 2005-12-06 10:10 | |
|
I am developing an asynchronous WAP client(using SDK V1.2),i am able to send the request to the server and get the response,the problem is, i am able to send only 5 to 8 times. after that, DOCancel method is been called automatically.
when i close the transaction(each time) it returns the error code RWSPCOConn::EInvalidTransaction -5473. I have given my code below.Any help would be really appreciable. Regards, Parthi void CWapEngine::DoCancel() { file.Write(_L8("DoCancel")); connection.CancelGetEvent(); } void CWapEngine::ReleaseTx() { //TState& aState; file.Write(_L8("ReleaseTx")); // if (!iTxOpen) return; TInt iState ; iState = transaction.Release(); file.Write(_L8("teans-release state = ")); TBuf8<20> state; state.AppendNum(iState); file.Write(state); //iState = transaction.GetState(aState); // iTxOpen=false; } void CWapEngine::ReleaseConn() { file.Write(_L8("ReleaseConn")); // if (!iConnOpen) return; connection.Close(); // iConnOpen=false; } void CWapEngine::RunL() { file.Write(_L8("RunL")); TBuf<50> msg; if (iStatus!=KErrNone) { file.Write(_L8("KErrNone")); if (current_state==TX) { file.Write(_L8("TX if")); RWSPCOConn::TSessionState s; connection.GetSessionState(s); msg.Format(_L("Conn state %d, error %d"), TInt(s), iStatus); } else { file.Write(_L8("TX else")); msg.Format(_L("error %d"), iStatus.Int()); } //observer.error(this, iStatus.Int(), msg); return; } TBuf8<100> msg8; switch (current_state) { file.Write(_L8("current_state")); case CONNECTING: file.Write(_L8("CONNECTING")); break; case TX: file.Write(_L8("TX")); if(event() == RWSPCOConn::EDisconnect_ind_s ||event() == RWSPCOConn::EException_ind_e || event() == RWSPCOConn::ERedirect_ind_s ||event() == RWSPCOConn::ESuspend_ind_s) { file.Write(_L8("TX error")); } else if(event() == RWSPCOConn::EConnect_cnf_s) { TBuf8<20> header; header.Append(_L8("\x80")); header.Append(_L8("\x80")); if(connection.CreateTransaction(RWAPConn::EGet,iHost,header,_L8(""),event_tx) == KErrNone) { connection.GetEvent(event, event_tx, iStatus); SetActive(); current_state=CONNECTED; } } break; case CONNECTED: file.Write(_L8("CONNECTED")); if(event() == RWSPCOConn::EAbort_ind_t ||event() == RWSPCOConn::EException_ind_e) { file.Write(_L8("CONNECTED error")); } else if(event() == RWSPCOConn::EMethodResult_ind_t) { file.Write(_L8("CONNECTED recv")); do { file.Write(_L8("CONNECTED loop")); TBuf8<2048> data; ret = event_tx.GetData(data, RWSPCOTrans::EResultBody); file.Write(data); Close(); iBarcodeAppUi.ResponseReceived(data); break; }while(ret == RWAPConn::EMoreData); } else { file.Write(_L8("CONNECTED else")); connection.GetEvent(event, event_tx, iStatus); SetActive(); current_state=CONNECTED; } break; case RESULT_OK_WAIT: file.Write(_L8("RESULT_OK_WAIT")); break; default: file.Write(_L8("default")); break; } return; } void CWapEngine::ConstructL() { CActiveScheduler::Add(this); fs.Connect(); User::LeaveIfError(file.Replace(fs, _L("c:\\wap.txt"), EFileWrite|EFileShareAny)); } CWapEngine::~CWapEngine() { Cancel(); file.Close(); fs.Close(); if (iCap) { //iCap->Reset(); delete iCap; } // ReleaseTx(); // ReleaseConn(); } //initiate WAP connection void CWapEngine::Connect(/*TUint32 IapID,*/ const TDesC& UrlBase) { file.Write(_L8("Connect")); iHost=UrlBase; current_state=CONNECTING; _LIT8(headers, ""); TBuf8<20> header; header.Append(_L8("\x80")); header.Append(_L8("\x80")); TBuf8<100> host; if (server.Connect() == KErrNone) { if (!iCap) iCap = CCapCodec::NewL(); iCap->SetServerSDUSize(/*MAXSIZE+3000*/150000); iCap->SetClientSDUSize(/*MAXSIZE+3000*/150000); // setup gateway connection info host.Copy(_L8("66.36.250.14")); TInt port=9201; if (connection.Open(server, host, port, 0, EIP, EFalse) == KErrNone) { iConnOpen=true; TInt ret; if (ret=connection.Connect(headers, iCap) == KErrNone) { connection.GetEvent(event, event_tx, iStatus); SetActive(); current_state=TX; file.Write(_L8("Connect end")); } } } } void CWapEngine::Close() { file.Write(_L8("Close")); ReleaseTx(); ReleaseConn(); server.Close(); // Cancel(); } |
|






Forum posts: 20
if(connection.CreateTransaction(RWAPConn::EGet,iHost,header,_L8(""),event_tx) == KErrNone)
.....
.....
iState = transaction.Release();
</your code snippet>
hi
You are getting this error invalid transaction (-5473) becasuse you are releasing the wrong transaction object.
'transaction' is not associated with your GET transaction, 'event_tx' is.
I would suggest you keep them seperate i.e event_tx for all session events and transaction for controlling(and releasing) a particular transaction(EGet in your case). so instead of event_tx associate transaction with your transaction.
-regards
Abhinav