#include "ttp.h"
#include "ttppdu.h"
#include "CBufferSegment.h"
#include "IrDALog.h"
#if (hasTracing > 0 && hasTTPLMPTracing > 0)
enum TTPLmpTraceCodes
{
kDiscoverComplete = 1,
kLSAPLookupComplete,
kConnected,
kPutComplete,
kGetComplete,
kDisconnected,
kConnectError,
kListenComplete,
kAcceptComplete,
kQOSrate,
kQOStimeout,
kQOSdatasize,
kQOSwindowsize,
kQOSbofs,
kQOSminturn,
kQOSlinkdisc
}TTPLMPTraceCodes;
static
EventTraceCauseDesc gTraceEvents[] = {
{kDiscoverComplete, "ttplmp: discovery complete"},
{kLSAPLookupComplete, "ttplmp: LSAP lookup complete"},
{kConnected, "ttplmp: Connect complete, buf posn=, size="},
{kPutComplete, "ttplmp: put complete, result="},
{kGetComplete, "ttplmp: get complete, result=, size="},
{kDisconnected, "ttplmp: disconnect event"},
{kConnectError, "ttplmp: connect failed, result="},
{kListenComplete, "ttplmp: listen complete, peer sap=, size="},
{kAcceptComplete, "ttplmp: accept complete, result="},
{kQOSrate, "ttplmp: qos bitrate"},
{kQOStimeout, "ttplmp: qos timeout"},
{kQOSdatasize, "ttplmp: qos datasize"},
{kQOSwindowsize, "ttplmp: qos windowsize"},
{kQOSbofs, "ttplmp: qos bofs"},
{kQOSminturn, "ttplmp: qos min turn"},
{kQOSlinkdisc, "ttplmp: qos link disc"}
};
#define XTRACE(x, y, z) IrDALogAdd( x, y, (uintptr_t)z & 0xffff, gTraceEvents, true )
#else
#define XTRACE(x, y, z) ((void)0)
#endif
unsigned const char *className = (unsigned char *)"IrLan";
#if (hasTracing > 0 && hasTTPLMPTracing > 1)
void LogOneQOS(int id, TIrQOS *q);
void LogQOSData(TIrQOS *myQOS, TIrQOS *peerQOS);
#else
#define LogQOSData(x, y) ((void)0);
#endif
void
TTinyTP::DiscoverComplete( UInt32 numFound,
IrDAErr result )
{
XTRACE( kDiscoverComplete, numFound, 0 );
discoverPending = false;
TTPDiscoverComplete(numFound, result);
this->CheckTheQueues(); }
void
TTinyTP::LSAPLookupComplete ( IrDAErr result,
UInt32 peerLSAPId)
{
XTRACE (kLSAPLookupComplete, result, peerLSAPId);
TTPLookupComplete(result, peerLSAPId); this->CheckTheQueues(); }
void
TTinyTP::ConnectComplete (
IrDAErr result,
TIrQOS *myQOS,
TIrQOS *peerQOS,
CBufferSegment *data) {
#pragma unused (myQOS, peerQOS)
if (result == noErr) { check(data); LogQOSData(myQOS, peerQOS); XTRACE (kConnected, data->Position(), data->GetSize());
BufHideRest(data); TTPHandleConnectConfirm(fPeerLSAPId, myQOS, peerQOS, data); }
else {
XTRACE (kConnectError, result >> 16, result);
TTPHandleDisconnectIndication(0, nil); }
this->CheckTheQueues(); }
void
TTinyTP::DisconnectComplete (void)
{
XTRACE (kDisconnected, 0, 0);
TTPHandleDisconnectIndication(0, nil); this->CheckTheQueues(); }
void
TTinyTP::DataPutComplete (
IrDAErr result,
CBufferSegment *data) {
check(data);
XTRACE (kPutComplete, 0, result);
if (result) { if (Connected) DoDisconnectRequest(nil); }
BufFree(data); this->CheckTheQueues(); }
void
TTinyTP::DataGetComplete (
IrDAErr result,
CBufferSegment *data)
{
XTRACE (kGetComplete, result, data->GetSize());
if (result == noErr) { check(data); BufHideRest(data); TTPHandleDataIndication(data); }
else {
if (Connected) DoDisconnectRequest(nil); BufFree(data); }
this->CheckTheQueues(); }
void
TTinyTP::ListenComplete (
IrDAErr result,
UInt32 peerAddr,
UInt32 peerLSAPId,
TIrQOS *myQOS, TIrQOS *peerQOS, CBufferSegment *data)
{
XTRACE (kListenComplete, 0, this);
XTRACE (kListenComplete, peerLSAPId, result);
check(data);
fPeerAddr = peerAddr; fPeerSAP = peerLSAPId;
if (result == noErr) { BufHideRest(data); }
TTPHandleConnectIndication(result, peerLSAPId, myQOS, peerQOS, data);
this->CheckTheQueues(); }
void
TTinyTP::AcceptComplete (
IrDAErr result,
CBufferSegment *data)
{
XTRACE(kAcceptComplete, 0, result);
check(data);
TTPHandleAcceptComplete(result, data);
if (result == noErr) { CBufferSegment *getBuf;
Connected = true; getBuf = BufAlloc(2048+5); require(getBuf, NoMem); DataGet(getBuf); }
NoMem:
this->CheckTheQueues(); }
void
TTinyTP::CancelGetsComplete(IrDAErr result)
{
#pragma unused(result)
}
void
TTinyTP::CancelPutsComplete(IrDAErr result)
{
#pragma unused(result)
}
#pragma mark ---- QoS debug logging
#if (hasTracing > 0 && hasTTPLMPTracing > 1)
void
LogOneQOS(int id, TIrQOS *q)
{
check(q);
BitRate rate = q->GetBaudRate();
XTRACE(kQOSrate, id, rate);
TTimeout timeout = q->GetMaxTurnAroundTime();
XTRACE(kQOStimeout, id, timeout);
ULong datasize = q->GetDataSize();
XTRACE(kQOSdatasize, id, datasize);
ULong windowsize = q->GetWindowSize();
XTRACE(kQOSwindowsize, id, windowsize);
ULong bofs = q->GetExtraBOFs();
XTRACE(kQOSbofs, id, bofs);
TTimeout minturn = q->GetMinTurnAroundTime();
XTRACE(kQOSminturn, id, minturn);
TTimeout linkdisc = q->GetLinkDiscThresholdTime();
XTRACE(kQOSlinkdisc, id, linkdisc);
}
void
LogQOSData(TIrQOS *myQOS, TIrQOS *peerQOS)
{
LogOneQOS(1, myQOS);
LogOneQOS(2, peerQOS);
}
#endif // hasTTPLMPTracing > 1