--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stdcpp/include/ipcclient.h Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+
+
+#ifndef __RIPC_SESSION__
+#define __RIPC_SESSION__
+
+#include<e32std.h> //RSessionBase
+#include<e32def.h> //Varargs
+#include<sys/types.h>
+#include<sys/sem.h>
+
+struct msqid_ds;
+struct shmid_ds;
+
+class TChunk
+ {
+public:
+TChunk(): iRef(0){}
+TChunk(TInt aShmID): iShmID(aShmID), iRef(0){}
+TInt iShmID;
+RChunk iChunk;
+TInt iRef;
+ };
+
+
+//-----------------------------------------------------------------------
+//Class name: RIpcSession
+//Description: It represents the session to Ipc Server.
+//-----------------------------------------------------------------------
+
+class RIpcSession : public RSessionBase
+ {
+ public:
+ RIpcSession():iIsConnected(EFalse)
+ {iLock.CreateLocal();}
+
+ //msgqueue functions
+ int msgctl(int msqid, int cmd, struct msqid_ds *buf, int &aerrno);
+ int msgget(key_t key, int msgflg, int& aerrno);
+ ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg, int& aerrno);
+ int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg, int& aerrno);
+
+ //msgqueue functions
+ int shmctl(int shmid, int cmd, struct shmid_ds *buf, int &aerrno);
+ int shmget(key_t key, size_t size, int shmflg, int& aerrno);
+ void *shmat(int shmid, const void *shmaddr, int shmflg, int& aerrno);
+ int shmdt(const void *shmaddr, int& aerrno);
+
+ //semqueue functions
+ int semget(key_t key, int nsems, int semflags, int& aerrno);
+ int semctl(int semid, int semnum, int cmd, union semun *arg, int& aerrno);
+ int semop(int semid, struct sembuf *sops, size_t nsops, int& aerrno);
+
+ RFastLock iLock;
+ private:
+ TInt AddToList(const TInt& aKey, const TInt& aErr, TAny*& aRetPtr);
+ TInt OnDemandConnection();
+ void Lock()
+ {
+ iLock.Wait();
+ }
+ void UnLock()
+ {
+ iLock.Signal();
+ }
+ private:
+
+ TInt Connect();
+ TInt iIsConnected;
+ //todo put a lock around this list
+ RArray<TChunk> iChunkList;
+ };
+
+#endif //__RIPC_SESSION__
+
+