--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayerprotocols/ethernetnif/IRLAN/INTSOCK.H Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,248 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Internal Sockets API
+// Written by Mal September 1997
+// Based on work by AdamG
+//
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#if !defined(__INTSOCK_H__)
+#define __INTSOCK_H__
+
+#include <e32std.h>
+#include <e32base.h>
+#include <es_prot.h>
+#include <es_sock.h>
+
+/**
+Specifies Internal Max buffer size.
+*/
+const TUint KInternalMaxBufSize=2048;
+
+enum TPanicCode
+{
+ EPanic_NotReady,
+ EPanic_InUse,
+ EPanic_StatusRecv,
+ EPanic_StatusComplete
+};
+
+class CInternalSocketTimers;
+/**
+Provides internal socket access direct to a SAP
+Based on CServProviderBase
+@internalComponent
+*/
+NONSHARABLE_CLASS(CInternalSocket) : public CServProviderBase, public MSocketNotify
+{
+private:
+ enum TInternalSockState
+ { ENew, EOpen, EConnecting, EConnected,
+ EListening, EClosing, EClosed, EFault };
+public:
+ CInternalSocket();
+ static CInternalSocket *NewL(CServProviderBase *aSock,MSocketNotify *aNotify);
+ ~CInternalSocket();
+ //CInternalSocket* NewL();
+ TInt OpenL(const TDesC& aProtocolName,MSocketNotify* aNotify);
+
+ // inherited from CServProviderBase
+ virtual void Start(void);
+ virtual TInt SetLocalName(TSockAddr& aAddr);
+ virtual void LocalName(TSockAddr& anAddr)const;
+ virtual TInt SetRemName(TSockAddr& aAddr);
+ virtual void RemName(TSockAddr& aAddr)const;
+ virtual TInt GetOption(TUint level,TUint name,TDes8& anOption)const;
+ virtual void Ioctl(TUint level,TUint name,TDes8* anOption);
+ virtual void CancelIoctl(TUint aLevel,TUint aName);
+ virtual TInt SetOption(TUint,TUint,const TDesC8&);
+ virtual TUint Write(const TDesC8 &,TUint,TSockAddr *);
+ virtual void GetData(TDes8 &,TUint,TSockAddr *);
+ virtual void ActiveOpen(const class TDesC8 &);
+ virtual void ActiveOpen(void);
+ virtual TInt PassiveOpen(TUint,const TDesC8 &);
+ virtual TInt PassiveOpen(TUint);
+ virtual void Shutdown(enum CServProviderBase::TCloseType,const TDesC8 &);
+ virtual void Shutdown(enum CServProviderBase::TCloseType);
+ virtual void AutoBind(void);
+
+ TInt Connect(TSockAddr& aAddr);
+ TInt WaitForConnect(TUint aQSize);
+ void Close();
+ TUint Recv(TDes8& aDes,TSockAddr* anAddr,TRequestStatus& aStat,TUint aOptions);
+ void RecvFrom(TDes8& aDes, TSockAddr& aAddr,TUint aFlags,TRequestStatus& aStatus);
+ TUint Write(RMBufChain& aPdu,TUint options,TRequestStatus& aStat,TSockAddr* anAddr);
+ void SendTo(const TDesC8& aDes, const TSockAddr& aAddr,TUint aFlags,TRequestStatus& aStatus);
+ void CancelRecv();
+ void CancelSend();
+
+ void SetNotify(MSocketNotify* aControl){ iNotify=aControl; };
+ static TInt InternalSocketTimerExpired(TAny *aCIntSock);
+protected:
+ virtual void NewData(TUint aCount);
+ virtual void CanSend();
+ virtual void CanClose(TDelete aDelete=EDelete);
+ virtual void Error(TInt anError,TUint anOperationMask=EErrorAllOperations);
+
+ // Pass the following up to layer above via iNotify
+ virtual void ConnectComplete();
+ virtual void ConnectComplete(CServProviderBase& aSSP);
+ virtual void Disconnect(void);
+ virtual void IoctlComplete(TDesC8 *aBuf);
+ virtual void ConnectComplete(const TDesC8& aConnectData);
+ virtual void ConnectComplete(CServProviderBase& aSSP,const TDesC8& aConnectData);
+ virtual void Disconnect(TDesC8& aDisconnectData);
+ virtual void CanClose(const TDesC8& aDisconnectData,TDelete aDelete=EDelete);
+ virtual void NoBearer(const TDesC8& aConnectionParams);
+ virtual void Bearer(const TDesC8& aConnectionInfo);
+private:
+ void Panic(TPanicCode aPanic);
+ void DoRecv();
+ void CompleteRecv(TInt aStatus);
+ void DoSend();
+ void CompleteSend(TInt aStatus);
+public:
+/** A pointer to the object which signalled it is ready to StartSending. */
+ CProtocolBase* iProtocol;
+/** A pointer to the object to indicate the server socket. */
+ CServProviderBase* iCServSocket;
+private:
+ MSocketNotify* iNotify;
+ TInternalSockState iState;
+ CInternalSocketTimers *iTimers;
+ TUint iSockType;
+
+ TUint iSendBufLength;
+ HBufC8* iSendBuffer;
+ TPtr8 iSendBufPtr;
+
+ TUint iFlags;
+ TInt iRecvNotifyCount;
+ const TDesC8* iSendDes;
+ TUint iSendFlags;
+ TSockAddr* iSendAddr;
+ TRequestStatus* iSendStat;
+
+ TDes8* iRecvDes;
+ TUint iRecvFlags;
+ TSockAddr* iRecvAddr;
+ TRequestStatus* iRecvStat;
+};
+
+/**
+@internalComponent
+*/
+NONSHARABLE_CLASS(CInternalHostResolver) : public CBase, public MResolverNotify
+{
+private:
+ enum TInternalHRState
+ { ENew, EConnected, EDiscovering,
+ EClosed, EFault };
+public:
+ CInternalHostResolver();
+ ~CInternalHostResolver();
+ static CInternalHostResolver* NewL();
+ TInt OpenL(const TDesC& aProtocolName,MResolverNotify *aEngine);
+ // Notifier call back
+ void QueryComplete(TInt aError);
+ // Need the following to mimic CHostResolvProvdBase
+ TInt GetByName(TNameRecord& aName);
+ void GetByAddress(TNameRecord& aName);
+ void SetHostName(TDes8& aNameBuf);
+ void GetHostName(TDes8& aNameBuf);
+protected:
+ void SetNotify(MResolverNotify* aControl){ iNotify=aControl; };
+public:
+ CHostResolvProvdBase* iHostResolver;
+ CProtocolBase* iProtocol;
+ /** Set to MResolverNotify ABOVE. */
+ MResolverNotify* iNotify;
+private:
+ TInternalHRState iState;
+ TBool iBusy;
+};
+
+/**
+@internalComponent
+*/
+NONSHARABLE_CLASS(CInternalNetDB) : public CBase , public MResolverNotify
+{
+private:
+ enum TInternalNetDBState
+ { ENew, EOpen, EQuery,
+ EClosed, EFault };
+public:
+ CInternalNetDB();
+ ~CInternalNetDB();
+ static CInternalNetDB* NewL();
+ TInt OpenL(const TDesC& aProtocolName,MResolverNotify *aEngine);
+
+ // Notifier call back
+ void QueryComplete(TInt aError);
+ // Need the following to mimic CNetDBProvdBase
+ TInt Query(TDes8& aBuffer);
+ void Add(TDes8& aBuffer);
+ void Remove(TDes8& aBuffer);
+protected:
+ void SetNotify(MResolverNotify* aControl){ iNotify=aControl; };
+public:
+ CProtocolBase* iProtocol;
+ CNetDBProvdBase* iNetDatabase;
+ /** Set to MResolverNotify ABOVE. */
+ MResolverNotify* iNotify;
+private:
+ TInternalNetDBState iState;
+ TBool iBusy;
+};
+
+/**
+@internalComponent
+*/
+NONSHARABLE_CLASS(CInternalSocketTimers) : public CBase
+{
+public:
+ friend class CInternalSocket;
+ virtual ~CInternalSocketTimers();
+ static CInternalSocketTimers *NewL(CInternalSocket *aIntSock);
+ void StartInternalSocketTimer(TCallBack aCallBack,TInt aTimeout);
+ void StopInternalSocketTimer();
+ void DoInternalSocketTimerExpired();
+private:
+ CInternalSocketTimers(CInternalSocket *aIntSock);
+private:
+ CInternalSocket *iInternalSocket;
+ TDeltaTimerEntry iInternalSocketTimer;
+ TDeltaTimerEntry *iInternalSocketTimerH;
+};
+
+// Added back in as the new stack does not contain sock.h
+const TUint KSoConnectPending = 0x0001; //< Connect request pending
+const TUint KSoIoctlPending = 0x0002; //< Ioctl request pending
+const TUint KSoRecvPending = 0x0004; //< Recv/RecvFrom request pending
+const TUint KSoSendPending = 0x0008; //< Send/SendTo request pending
+const TUint KSoConnectionless = 0x0020; //< Does not need to Connect
+const TUint KSoCantRecvMore = 0x0100; //< Recvd EOF indication from peer - used with RecvNotifyCount
+const TUint KSoCantSendMore = 0x0200; //< Send EOF idication to peer
+const TUint KSoSendFlowOff = 0x0400; //< Send is flowed off
+const TUint KSoUseCanSend = 0x0800; //< Use CanSend()
+const TUint KSoGracefulClose = 0x1000; //< Use Graceful close
+
+
+#endif
+