Dear Sir

First opensession
     slot->sessionIDCount=1
     slot->index=2
     sessionID=?(0x02000002)


    pk11queue_add(session,
sessionID=0x02000002,slot->head,slot->sessHashSize=32);
                { int tmp = pk11_hash(id,hash_size); \
                    session->next = slot->head[2]; \
                    session->prev = NULL; \
                     if (slot->head[2])     slot->head[2]->prev = session; \
                     slot->head[2] = session; }

   result:
            sessionID=0x02000002;
            session->next=NULL;
            session->prev=NULL;
            slot->head[2]=session;

 Second opensession

     sessionID=?(0x02000003)

    pk11queue_add(session,
sessionID=0x02000003,slot->head,slot->sessHashSize=32);
                { int tmp = pk11_hash(id,hash_size); \
                    session->next = slot->head[3]; \
                    session->prev = NULL; \
                     if (slot->head[3])     slot->head[3]->prev = session; \
                     slot->head[3] = session; }

   result:
            sessionID=0x02000002;
            session->next=NULL;
            session->prev=NULL;
            slot->head[3]=session;

my question:

1    Does  it seem to be working as intended in the examples my gave above?
2    if yes.   can you tell me  what is the relation  slot->head between
session?
3    I read the sourcecode in fortpk11.c.  The following figure describes
the realton .



> look at the programm in the pkcs11.h
>
> suppose:
>
> First opensession
> slot->sessionIDCount=1
> slot->index=2
>
> [sessionID = (PR_AtomicIncrement(&slot->sessionIDCount) & 0xffffff)
>                         | (slot->index << 24);]
> sessionID=?(0x02000002)
>
> Second opensession
>
> sessionID=?(0x02000003)
>
>
>
>
> /* NSC_OpenSession opens a session between an application and a token. */
> CK_RV NSC_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags,
>    CK_VOID_PTR pApplication,CK_NOTIFY Notify,CK_SESSION_HANDLE_PTR
> phSession)
> {
>     PK11Slot *slot;
>     CK_SESSION_HANDLE sessionID;
>     PK11Session *session;
>     PK11Session *sameID;
>
>     slot = pk11_SlotFromID(slotID);
>     if (slot == NULL) return CKR_SLOT_ID_INVALID;
>
>     /* new session (we only have serial sessions) */
>     session = pk11_NewSession(slotID, Notify, pApplication,
>        flags | CKF_SERIAL_SESSION);
>     if (session == NULL) return CKR_HOST_MEMORY;
>
>     PK11_USE_THREADS(PZ_Lock(slot->slotLock);)
>     if (slot->readOnly && (flags & CKF_RW_SESSION)) {
>  /* NETSCAPE_SLOT_ID is Read ONLY */
>  session->info.flags &= ~CKF_RW_SESSION;
>     }
>     slot->sessionCount++;
>     if (session->info.flags & CKF_RW_SESSION) {
>  slot->rwSessionCount++;
>     }
>     PK11_USE_THREADS(PZ_Unlock(slot->slotLock);)
>
>     do {
>         do {
>             sessionID = (PR_AtomicIncrement(&slot->sessionIDCount) &
> 0xffffff)
>                         | (slot->index << 24);
>         } while (sessionID == CK_INVALID_HANDLE);
>         PK11_USE_THREADS(PZ_Lock(PK11_SESSION_LOCK(slot,sessionID));)
>         pk11queue_find(sameID, sessionID, slot->head, slot->sessHashSize);
>         if (sameID == NULL) {
>             session->handle = sessionID;
>             pk11_update_state(slot, session);
>             pk11queue_add(session, sessionID,
> slot->head,slot->sessHashSize);
>         } else {
>             slot->sessionIDConflict++;  /* for debugging */
>         }
>         PK11_USE_THREADS(PZ_Unlock(PK11_SESSION_LOCK(slot,sessionID));)
>     } while (sameID != NULL);
>
>     *phSession = sessionID;
>     return CKR_OK;
> }
>
>
>
> /* queueing helper macros */
> #define pk11_hash(value,size) ((value) & (size-1))/*size must be a power
of
> 2*/
> #define pk11queue_add(element,id,head,hash_size) \
>  { int tmp = pk11_hash(id,hash_size); \
>  (element)->next = (head)[tmp]; \
>  (element)->prev = NULL; \
>  if ((head)[tmp]) (head)[tmp]->prev = (element); \
>  (head)[tmp] = (element); }
> #define pk11queue_find(element,id,head,hash_size) \
>  for( (element) = (head)[pk11_hash(id,hash_size)]; (element) != NULL; \
>       (element) = (element)->next) { \
>      if ((element)->handle == (id)) { break; } }
> #define pk11queue_is_queued(element,id,head,hash_size) \
>  ( ((element)->next) || ((element)->prev) || \
>   ((head)[pk11_hash(id,hash_size)] == (element)) )
> #define pk11queue_delete(element,id,head,hash_size) \
>  if ((element)->next) (element)->next->prev = (element)->prev; \
>  if ((element)->prev) (element)->prev->next = (element)->next; \
>     else (head)[pk11_hash(id,hash_size)] = ((element)->next); \
>  (element)->next = NULL; \
>  (element)->prev = NULL; \
>
>


begin 666 clip_image001.gif
M1TE&.#EA*P)%`7<`,2'^&E-O9G1W87)E.B!-:6-R;W-O9G0@3V9F:6-E`"'Y
M! $`````+ $````I`D4!@0```````/___P$"`P+_#(RGR>L-GXQTVHJOSGS[
M#GYB2(YFB9YJRJYN"[^R`=3VC>?ZSO?^#PP*A\2B\8A,*I?,IO,)C4JGR@"-
MBLUJM]RN]PL.B\?DLOF,3JO7[+8;:WW+Y_2Z_8[/Z_?\OO\/"!@72%AH>(B8
MJ+C(V.CX:#@(.4E9:7F)F:FYR=EY(^D9*CI*6FIZBIH:>:7:ZOH*&RL[2YL)
M6HN;J[O+V^O[ZW,+/$Q<;'R,G'PGK-SL_ P=+1W-/&U]C9VMO5U9_60%'BX^
M3EYN?HZ>KKX>_L/^#A\O/P\N2'^/GP^?'2#@_P\PH,"!! L:/(@PH4(!K'3T
M6P@QHL2)%!G^>5@QH\:-_PL;DO+F!"/'D20Y>L0ALJ3*E1!/XDG),J9,@2Z?
MP9R)DV7-&C=S^B2YLT[/GT0S!N4$LLG0HDQ;!FL*U>C%J%0E'DVVM*K6?T&S
M;MUZ58[7KU7#VC*+9"Q9J%W7N@6(MHW:MT7C$IM+UV?;O&OMKL'+%Z=?2DF9
M``X<<R]BK8/3'%Z\LK&OQY"!/JU,5?(9RIA-IBJ\A'-GJ3U$CZZHV8SITQ-3
M[UK-VFGIV'6GTO[IFA'H*@C!,?0'^S=JX%:X%F=XW.IE@[X?!A?M/+EOY)QS
MC_':'/A(Z,0Q3N=J7*UU7%F]]TM.LV-UYW#!:V^]G*!YY 7GHH]X7*1W]_#]
ME/\W3I]\ZJ'&'G_SM9?0>(GLEL1_[@W5TTW<"?<>A90I)N"#]648T(01\J><
M?P?I5V%Z`TEH5(D(JB@>/R.>&%YW\J5TGG[YH5=<@17NUQ\/#G88(W4S`HGC
MC38*]Z&*LO7QXXK3?=<AC0'**"2 .J[(HD(*(L)@6KU)::&240*())EE!DCB
MCA1A."2"/)9WH([2O9<?A]79QAR8;XX8YXY[HDD3F" RYV*"?Y[Y8IC4X:@F
MA8HZNN0.XAUZY8:*BN.FAB:*J26>?&J**'.-8@IJI2 *.N)G6^: 5X&4WC<G
MG5'6*:N!@W847V^U(@KEE(=V)Z>8:?;(1ZN[R@DKCZ'_+CHJAY"VB$V3KH(:
M*)"[7DJMLA?FNNF9OX[I9(F4*HDJ?I["J.FW< EZY;B0GFIM;ZIJ`6>Z&L*$
MXK%_9F<KI_+.EJ>]LN*++J_[YFBMLB$R^6FM>Q*\*;+I(ESPLYU&^^*31IK)
M9XW1?7SCLE!N"_"&&G_,<9X>4TDJQ39^=V<P,\C +9$;5SEEQU6>''*[(S.:
MX+Q9!%>6KL0Z=-NMW9HK8M+O)GCQ-41G9O3"DCK]=+Q6[S%U5(]!>TJ71W3-
MUGU!;LTJUKV>C78>9#>U=GUFRU<HUHG5;+=E3>>MD]!P\-UWR8"7M*H7;P->
M>"R'Y\WFX)[M[?AV?E.QN-V-_T=.&L.82X[QYAM=[GG;+X7^^>135*XVWJ3C
M"OGJHMND3^RRS]X5[;;?'L]%N._.NSFFZY$X-\(/+PCQQA]?1?!;*(]\\\ZK
MP?SSTM\5/1S37X]]\=EO?[S8;%3/??CB&P'^^.:'7;X4Z9_/?OL*N \_5NM#
M,7_\]E]?__WZZY:_4OO_#T A]"^ !/3/`$-3P 0J\( *;" =O/<7!TI0?PR<
MH 4=4\&T7'"#Y\L@!S_X!0A"#X0DQ)X'2XC"TYVP""M,H0M#T<(7RC M,13@
M#&_(#QSJL%@U#$(/=PC$!05QB _\H3N(B,1B&#&).A2A8Y@(Q5X<$&M1E-H2
M2S.TH/]0L8I,5%Y2MLA%:ES11W"H!P_ &,8A!J\=9W1:&L5X$<J)HXU)>R,1
M$S<..M[&CK"+H_K(L0,T\A&'7OR!( =I#">BH9 ^."0B7\C('CCRD<!0Y&:&
M9DBYS0IF.4K6VRA)2$PV4E0)BU>^5@+*8UA2-:*49, R%:ZED225,XRD'F&4
M)G95K"2T5.(8)=7*6YKH6PI3&D=Z"<E@!I*4WC+E+F>)S$K^TB'*U$&BM%.I
M8OI+(]%,H2V7:2DRZ;(]Y:I(-W^QRC)\TYK,[)>C<HDE;IZ3A.O,@<JT]C-,
MD0.:\WS--%E537NZL9\?K"<.)DE0Q?V3)X",PE$0FE "YE'_?9FL8T3)LU"&
MLM&A%=WC12>X48Z.TJ(?G44ZKV-&BH[4HR5UX$F!N5+:M-2D&;7!2ZD9T]C,
ME(\/'>A.7W%32?5NJ$/]*0I1Y[2:&M42046:ZXZVU LB-6E*C>HDFIJVI[[.
MJ@O4ZE:YR@_F3?4V507K:[S*-+,2#ZLH06NDU-K L=*FK'!=D%C=RKJZQO5+
MYUG37/4J/+9^XIIS\QQ=`:NX:V9M<X=%;" $:U/%KLL\E/73?@K[N9SEU;$!
MQ(XNI_4;6H56M$ A;=0X:PW(\D1+E*78H(+U*,(9DU"H[6Q+R'6D8S5*)=K\
M5VVGH=H#*-946>+5;F6[3;K]]G_U_](M:$%KW,C,MC[+!>Y=195/*NWL9LW!
M[)HZ"9C&5K<4<HV->,>[C.OBU;?HA5]Y67/>]A:17NL-FGS=6U_VWE>5ZLVO
M<O?+OO>>)KX`EDM__4N3`@<8P=15<"(/S&"N.-A\1*WP[B;L2^U1#L/]7".!
M.=R(X-*KC!\&,?+PF%(3.T_$`55*2%5,R<)-%,8G+JN,9TQC1*ZJ'#GNGHU;
MW.,W&C3(VF"Q]8Y,9!T#.<E6Y"&.O\%D.S94I%'FAI$=.L?355G(+X;REK=Q
M92Q#ML1?%N,:RUSDJJJ6S&BVR9+;K([EMAIL PROTECTED](-SD2-\(CO_SJ%X3K">I=;G
M#OT9??0-M/^$!PU<0Q\:T:.0LZ*!PVAI"'@T;(XT"R&,YTI;^GN/MLBF/>'H
M1VOZTX[AZV(E2Q33C)K4P<"TDR9-((VLFM7J'.Z 94WK380ZG+,ZVY-\K5FH
M85;5N4:&9YWY7$!AT[0ZRQJQBXV)73=L47V-)VQ[R\PDH0;:B;SMNXI4JN-"
M;=G#6A.W+R'MBA'78M'%=CBU;>YS#Z.YQDUVNZ=;,'A#5=XA=C5XLHNSD[$,
MO.I96:^WS6]T=GK6_$YWGQF>\$(K&N+G=GBF(SZ9A6/\$1:/,,4WKCZ-@YQ_
M$C?TQT?^#9&CW*XE#_3)5VX8.LL\'S!G><UOCG.%YGSG/"=TSW__#G1=OSSH
M1-]YF(N.]*0;[H=,5[K3T7QT(C3]Z52/<M2',/6J:[W'5[>A6+8.=AIWW8=S
M&'K8SQ[7K+O![&AO>V?5+A>WRWV_8P<"W.>.]]K6_8A?S[O?]7[W"/Y]\(C=
MN\SZ3OC$J]7PBF\\R!GO^,@WG.V2K_QX(6_YS),:\YKO/*,Y[_G0VQGTHB_]
METEO^M0G&?6J;[W8*>]Z5<Q\]O2(??):_G#;/U#ENK\T[B_>^S? &C.PWW3'
M&5S\IP^_,LF/]/$1W'RE+Q\RT4?T\_U;?:1/?S'9__/U\]M]HGNVVE9A3+R#
M+W5_^\F\)$,_I]NY?;_NV_VE4;^SI8-__V1=MG+MIW^IIZTFR29:!K<X_>=_
MK?9[)]):Y%=<[J(3YW> F^%M^));]Y9<*3)_$8@2]@=/NP1=L/6 &:B!(31M
MP6)OUX9O&/A5(WA]!C=PE;5=*!,WG^-=#3:"M29J-UA_"8A\.HB#$^>#0L6#
MT!>$U\%[1<A00XA]2!@&\1<8X3=Z]@=^3 @&3L@74 AG<D9[[email protected]%:X6%
M7RB&$A6&8VB&%%2&9ZB&[L-Z:^B&4I:&;RB'V].&<VB'252'=ZB'0)2'>^B'
MM12'?RB(:3:(A;AX@6B(B=A'BLB(.]6'C0B)9!B)DYA0CTB)E^A>B(B)FT@+
MELB)G\@]G@B*HRPX/:)(BJ=88ZBHBE 4`ZTX,ZX(BZ\HB[%(B[-HB[6(B[>H
,B[G(B[OHBQ%0```[
`
end


Reply via email to