-N+
zxc{vC3}mv6pSwaad{iID56=W#pT`w3V~AwMB|do(FRM%D({M-j$MhY^r+umlzh}Ys
Y4CCR?Y#-0R+1f9krRrB04H~BSe@p_*q5uE@
literal 16952
zcmeI20d!PVddJ^ng3Jb-83iS~K$+FB8x+G#0vHk9nUI(l90;1Ac7eu_OiW6cWRo`%
z7jR)GL0-dX_Q>vGTkCR^)6&Z6p(|yPQXL@zyGwggh00p19A#I+pk)O$Dr@?E_kDNf
zo6EejxToi|J*O9D=Dpwj-|v3+-tXOe-+TF9RrszvheMOeq1~xv&Lq{e@;fufL2($=
zyxP^89zW;O`^O;B6L;Xx{_EiDMYN&!yUrllHwsCQ54sMu4CsBMp5DI(xU^0;KiADq
zbn_#$A%uEj$yfH}Vabi3X+BMR_!=y=Y{j9L63?_=;8@98mu~(lkkpSj#rcu=$TX1y
zuDmy*&-irX%UJZ~Vdn+?Io*8QGW^0UV|C}Ow$3KqadQ7G(6^XNz|IFC&`sBVEMWaOZCL}Ty^@9>JiA)^dpa*Cl^BIv9S5C=tv+LPFyW=XM7q?
zSp8#OuzWL5kavkk!H3`KN3OEWY?3W`5&g;0oKXF}Ve@tU$jjKF`_VJubf}){TAHru
zZ7ve#0!i6G-?9~<<pz9}CCk(6U1VHu*THskc1SVEl5H$FWSkXrGUDrJlCU54@V%*y5R1
z36ABqj{`8g48t&Yem>^kZl8}MG&~veWvuokJwHrhczX6Gv*H5+d*eC3Pt%(9{`~31
zP*68}i;4k2(Dr@o>D_`Io>*Sw)6L(#ph3;L`Jr^{NPZC%00IM8S>zJOaNxxQ5zjFC
zl|_YkDn>~+e^X-)21dn6*nG!|92xZqqsW`idoOeVd(kS^A1;E+c486L%g0iOyh6Rd
zz6i!%j8%4KJ!IZo52bTtns2AZQC#WqBM#5rvGaY#N4-g-M^7|3Qf?T(`93{S=P-(O
z^EJ<2XKyn0K`4I7VHCl4o-qr)oyNRSe9!?ska`L9n0wd>9r9Z2&HV-7f8b-$0<%g>
zy`BwRsl(YIKlKmd^40sdi2iTZ%f^cViA~Tq4&o4rD?v<8sW*h#fzbV-`$9`Y^A%t(HX&+ZHGMB+4hmmrS$WTDPtv$U
z9KfQYo9}uayAOin^0h_8iJYI`;ekljtZM;g-rl>xfVAj&>}NLSa6K^J$!@JEB{mt>
zdI56-wj@0_c>2Br*5C@phRZAX5L`UH8YUZiV*Pp^$0v7vU{XsxX`e6Fr%t>ma+ily
zLK|LUpD)%YzsP?hS9@`N9`<6s?BA>l{RQ-|(mY#f{w8dGBDyG$96kjx3^T&;Kf-UO
z{bz?iSI)3vDvT;Mh4r1?P};jpUoZyb#b9_Gfk(Ww|-y8-p(Bj(rrm*{Qt-O`-=}*M+P-<
z*JQ00R_w*sdNpGPZ?WFL)=P0IRu${`$O5s6gqs_<3(LgMW%l~l7UKTqYFSF`HAN{g
zUy6m{B9uBI?-}G(SFHChge(kUtVS&MN_Ojzu&*Y|3?43SLWa3Wo3cY(GJ7c(HV(G
znkO&w`&Soe@|JX#Hobe+^yXXOe_J$j+z~UhmbUhYZ+f?Hp06sjU_n(~0Vh=t)YR2y
zk;S1!RrR&C;o8O3*}S%Dv7)T4Te3jW)K}Krn}zPJy$foLbanZpAF=4FXvdmpf!3vU
zN1EpOrnfiyqVlLfYi?_4;pbf|wf44X1l*tA4VJqi5npFlM^mJ`JJOwX>YLtNpivea
zLxHwvbEHRL?6bD$LqLQTs|(R26j`%UliAQ+EMIGC@94HlX)7Zw9bFM$3!(^^(HdKf
z2(&4EF16U>|DXO3_dxZ61@nBxOIOCCM$9*-q_iY(OKE9LoR-e8fUndam=o{^{M5{e
z^y~QUy_%!P>zF)#tZM*f9OP3duLOT9-QG60OPdXc_`$RnzZSZ^oAN^L!nkvh+qbO1
zT^Ks#_J$6-U3ZVmYjPJZptEw2wxb@>&+)6m?cI`B=`P<aAI}`FV!BIOO)<=PuXX
z!4|gnLEgh0vZ3pF*q$(mnX(2Fg8=SK%&v+*#rFCGsoW#aqUJvzx98
zxy$2YtKFx9YYW`vKtk?fP=FFjfbU=p7oBFZg_~SV#qjAN)_@?>7rN++MVZE9d3-{J
z=_}Tcuqkfr;an_F@C#dg?HK9Slh2Q%&k5|`E&1TtrZJUnfBdRycXERx@6!U|E%Za$
z+lAQnneds2WyDwq9@
zm)k%7CG^;T`Qk~c)rS;YBJeQJM|n3<-SNCu5tBHE^C@p3=4E25631{oguaYl)V7iq
zZq+Z-_9)t|U&3zk3hino-H)s`8dt)v(PjO%%A>AGdt-?a=`pmD=0>AYD_Pmyt(A0j
z;0ekDB>_$3m&Bs&ZL1>fk3cS#u_RhaQ^)Gnkth_0H9k^Oy?E&@-9}^6DpEyS8(O*=
zS4Xhrwh2QwU;FK7E`c-W6M0Q@!oOU}i4PTXB&Q~?!0b$?CLTa%!E4|wkJT&YKwvX$
zc+iF~x8Z=nd%P{ZJUO+3%OMb_hF55IdPJOF-mXW9i}{chi4*rRhKHNQ`51Bi^Q;8%
zf8r31pCrCQ;oFGE6#g{v+Z6sR@w*killYGn{&&P5Q}`a@yA-~k_^S#}5(@_)
z#9jrC@3GN8V8b6IJ63pZP-
z^7_X8O)mXm(tByD6#F3X=PeukX&e5b4Ii=Lqc$9059IQ*5IDALh^B6_?*czdZS=R<
z@DSPY)6^!NiX+gTZr!_j(Z18e@=XexY(Nk{~H_o
zyGg%u-$ee*B7UCuLgKh5$~C?fqz}3+VHN3@5Fa2e?W`bvO3`b$*N8>ini`F^j%Z1f
zylZa2```w+gDvT7>@rHqvUyw7!hX1I?|QhcDbj#9+g2Hw7s!#9wpXf^gctbns|>$p
zS_jb?a^p|z~(YBM64
zb~YNVkk!>5iQ-Qb`ZV2bosie9H8gZbJG#B6YrmjdM*jc@*rLCm{L|{AG
z(a_#u4GMr4mxyQWx#=Paum+rgd&E{k8V5Nk4Ijj%I~Ko$5UBLh!lHWcrS
zLG2GgY|-Nxs2B~zx+0mr!X8SWQRjdooo&r&+8lv$9gn2XMYzJV7+EWi#~ctJ%}57i
zq^E)Cng%c?6&B!Sp!LnzO!$_f>{t+4(itmDT%j~=iIw^mAeZ1>1tz*IVUMh7cr3XO
zjxpghUIHJonJ7He=Q*OCm5g0_`A$LPT5j_f$?h@&%=g7LjP}tkJL{fjz1F^
zzrjXd#`O5SMB1sa(bqBkbxgm~M&Hf!xF?bJzi*>|lIbTg{WCWD=b0YYR%!pBjs7*J
z|0>hJW266walA*7_7}oBgbB011|P}S63215o$<|#&u4rauW+S$Q4*Z-99JDL6<
zar9?0<3Ms9z<4Fo?_+kp&bY$`Cy>xjyw{g;
zGLi98#=p)upI2{UoX@M@B986Fd369jnCckk^U_LYhqtSPabE8_#(BMuGy7O?5zXU&
z#Wib*I!Q@+so(Y8*KD*nSK(Kk^Ns`qrZ>o`Fy+5M*lF=
z^ZEAsHu@hiJzwvhvC%)z^n4r-+UQR(uCw;m(EXEoy=-8d$Khti`MU698$QT*kku<6
z-C@1l{#XneNH~r+z(AC%XX8Iy#{{+)>|9{Q&-2aPA&+Sj6`&xB;n;7T*|0!|o|LM%1N0^@5-@x>|
z|2H!|_kSDHe}mcoOQx@8{3zo=#+`JZt;SCQan=8?GClX-$Mn4aiRRjPrH{#-iHNSHZ8;4>HcVv>5<
z|6vQK`Fzr2Y-5u8Q^YYQF-b1pH9uhCG}lSLT;XBj4=Q{K@n(hB6K_@c1H{`EzMOcc
z!hLifWhlIv^gRmKNxx3v?WEtJ@J`~r3O9&vR(KEbEec;pd_dvbiEmZ-0PU-`DSRvO
zrxZTovcPtQKSlZ-3g1qAr^0s--=*-K#CI!v7x6s`-%Wg?uXB2*#_&J52A%0%r
z=ZIfa_<7b9AFf8$NiFm%kW&d06FEjH-KJClLD|+d_SK;GHZ@t&d
z*zpoCRP+;xPf>Uwai7Ac5SRChvR!^^SFxfGl76PbD~ZeZjM9$mx7mt5O!{(#%lA$5
z6%KzkDN<134-l_Z_;TX9!XG3aRyh0-qex2>-b%b);qAoneJv*0-cI83{kG(@i9e|5
zdx$qHd>!#th0FWHc7@Bh?NqqDZ!{FXh3xkzT=vg8g>NPO28C}U-mCDZh;LT-cH&zU
zzJvIH!gmtis_rSL)GyA^(v_#TBHBfd}J
zGJbp_sxom!r&_tf{dC@`a5)dE>r|5JQ|JHl7^slcd04)$pQ89F-;b;DDc^Ui@gv`B
ztNkh8UmsBH%lFqq3YYJ%kdCI)
zeUr@a$^-hH48QsC3DUXz@!e=0ZKnG){K0x?dyxKnQM{K&PR)ZOD@BxgC8uzZr{X>Y
zZT_L<@tq#p#Ah))$@-sDDwL=4HwcCBSnWSAzO>7cWI35t4+qF7+$7dyd3jyP4D4&3
zYT+bT|L??xL29M=$NtA#TDAX|1H<~|JOYOz9lO^0#d~O;r2q0a0-5rd>pr9MoZ+#m
z{Vp-J{o-XJ&FvZ}LtNq^jB3qO9lh}TIR42<9TG<*7lTwAqIfD;(A@y26
q>2KA4Jip9$V4ah!B0;JU!+9or)cSFom8<^U__74jDkW2`|GxmgJRQUU
diff --git a/lib/process.c b/lib/process.c
new file mode 100644
index 0000000..7f3cba7
--- /dev/null
+++ b/lib/process.c
@@ -0,0 +1,43 @@
+#include "process.h"
+
+struct process * srv_process_copy (const struct process *p)
+{
+ if (p == NULL)
+ return NULL;
+
+ struct process * copy = malloc (sizeof(struct process));
+ memcpy (copy, p, sizeof (struct process));
+
+ return copy;
+}
+
+int srv_process_eq (const struct process *p1, const struct process *p2)
+{
+ return (p1->pid == p2->pid && p1->version == p2->version
+ && p1->index == p2->index);
+}
+
+void srv_process_gen (struct process *p
+ , pid_t pid, unsigned int index, unsigned int version)
+{
+ p->pid = pid;
+ p->version = version;
+ p->index = index;
+
+ bzero (p->path_in, PATH_MAX);
+ bzero (p->path_out, PATH_MAX);
+ snprintf(p->path_in , PATH_MAX, "%s/%d-%d-in" , TMPDIR, pid, index);
+ snprintf(p->path_out, PATH_MAX, "%s/%d-%d-out", TMPDIR, pid, index);
+}
+
+void srv_process_free (struct process * p)
+{
+ if (! p)
+ return;
+ free (p);
+}
+
+void process_print (struct process *p)
+{
+ printf ("process %d : index %d\n", p->pid, p->index);
+}
diff --git a/lib/process.h b/lib/process.h
new file mode 100644
index 0000000..13461fd
--- /dev/null
+++ b/lib/process.h
@@ -0,0 +1,35 @@
+#ifndef __PROCESS_H__
+#define __PROCESS_H__
+
+#include
+#include
+#include
+#include
+
+#define TMPDIR "/tmp/ipc/"
+
+// TODO to check the right length for a path
+#define PATH_MAX BUFSIZ
+
+#include
+
+struct process {
+ pid_t pid;
+ unsigned int version;
+ unsigned int index;
+ char path_in [PATH_MAX];
+ char path_out [PATH_MAX];
+ FILE *in, *out;
+};
+
+struct process * srv_process_copy (const struct process *p);
+
+int srv_process_eq (const struct process *p1, const struct process *p2);
+
+// create the service process structure
+void srv_process_gen (struct process *p
+ , pid_t pid, unsigned int index, unsigned int version);
+
+void process_print (struct process *);
+
+#endif
diff --git a/pingpong/pingpong.c b/pingpong/pingpong.c
index 6b78ddc..4b932ba 100644
--- a/pingpong/pingpong.c
+++ b/pingpong/pingpong.c
@@ -17,7 +17,7 @@ void main_loop (const char *spath)
while (cnt--) {
// -1 : error, 0 = no new process, 1 = new process
- ret = service_get_new_process (&proc, spath);
+ ret = srv_get_new_process (&proc, spath);
if (ret == -1) {
fprintf (stderr, "error service_get_new_process\n");
continue;
@@ -35,7 +35,7 @@ void main_loop (const char *spath)
bzero(buf, BUFSIZ);
// printf ("before read\n");
- if ((ret = service_read (&proc, &buf, &msize))) {
+ if ((ret = srv_read (&proc, &buf, &msize))) {
fprintf(stdout, "error service_read %d\n", ret);
continue;
}
@@ -43,7 +43,7 @@ void main_loop (const char *spath)
printf ("read, size %ld : %s\n", msize, buf);
// printf ("before proc write\n");
- if ((ret = service_write (&proc, &buf, msize))) {
+ if ((ret = srv_write (&proc, &buf, msize))) {
fprintf(stdout, "error service_write %d\n", ret);
continue;
}
@@ -66,11 +66,11 @@ int main(int argc, char * argv[])
{
// gets the service path, such as /tmp/
char spath[PATH_MAX];
- service_path (spath, "pingpong");
+ srv_path (spath, "pingpong");
// creates the service named pipe, that listens to client applications
int ret;
- if ((ret = service_create (spath))) {
+ if ((ret = srv_create (spath))) {
fprintf(stdout, "error service_create %d\n", ret);
exit (1);
}
@@ -79,7 +79,7 @@ int main(int argc, char * argv[])
main_loop (spath);
// the application will shut down, and remove the service named pipe
- if ((ret = service_close (spath))) {
+ if ((ret = srv_close (spath))) {
fprintf(stdout, "error service_close %d\n", ret);
exit (1);
}
diff --git a/pubsub/pubsubd.c b/pubsub/pubsubd.c
index c1263b0..0295c87 100644
--- a/pubsub/pubsubd.c
+++ b/pubsub/pubsubd.c
@@ -1,4 +1,4 @@
-#include "../lib/communication.h"
+#include "pubsubd.h"
#include
const char* service_name = "pubsub";
diff --git a/pubsub/pubsubd.h b/pubsub/pubsubd.h
index 4c70462..9e507d0 100644
--- a/pubsub/pubsubd.h
+++ b/pubsub/pubsubd.h
@@ -1,7 +1,10 @@
#ifndef __PUBSUBD_H__
#define __PUBSUBD_H__
-#include "queue.h"
+#include "../lib/communication.h"
+#include "../lib/process.h"
+
+#include "../lib/queue.h"
struct message {
unsigned char *chan;