9
#endif /* HAVE_UNISTD_H */
13
#endif /* HAVE_PWD_H */
15
#ifdef HAVE_SYS_TYPES_H
16
# include <sys/types.h>
17
#endif /* HAVE_SYS_TYPES_H */
18
#ifdef HAVE_SYS_SOCKET_H
19
# include <sys/socket.h>
20
#endif /* HAVE_SYS_SOCKET_H */
21
#ifdef HAVE_SYS_STAT_H
22
# include <sys/stat.h>
23
#endif /* HAVE_SYS_STAT_H */
26
#endif /* HAVE_SYS_UN_H */
28
#include <glib/gthread.h>
30
#include "../src/rccexternal.h"
31
#include "rcclibtranslate.h"
37
const char *rcc_home_dir;
38
struct sockaddr_un mysock, clisock;
42
unsigned char loopflag = 1;
44
rcc_external_info info;
50
#endif /* HAVE_PWD_H */
54
rcc_home_dir = getenv ("HOME");
58
pw = getpwuid(getuid ());
60
if ((pw)&&(pw->pw_dir)) rcc_home_dir = pw->pw_dir;
62
#endif /* HAVE_PWD_H */
63
if (strlen(rcc_home_dir)>256) return -1;
64
if (!rcc_home_dir) rcc_home_dir = "/";
66
rccLibTranslateInit(rcc_home_dir);
68
sprintf(addr,"%s/.rcc/comm/",rcc_home_dir);
70
sprintf(addr,"%s/.rcc/comm/%lu.sock", rcc_home_dir, (unsigned long)mypid);
72
s = socket(PF_UNIX, SOCK_STREAM, 0);
75
memset(&mysock, 0, sizeof(mysock));
76
mysock.sun_family=AF_UNIX;
77
strncpy(mysock.sun_path,addr,sizeof(mysock.sun_path));
78
mysock.sun_path[sizeof(mysock.sun_path)-1]=0;
81
if (bind(s,(struct sockaddr*)&mysock,sizeof(mysock))==-1) return -1;
88
sd = accept(s,(struct sockaddr*)&clisock,&socksize);
91
readed = recv(sd,&cmd,1,0);
98
case RCC_EXTERNAL_MODULE_CONTROL:
101
case RCC_EXTERNAL_MODULE_LIBRTRANSLATE:
102
info = (rcc_external_info)malloc(sizeof(rcc_external_info_s));
103
if (info) info->s = sd;
105
if (g_thread_create(rccLibTranslate, info, FALSE, NULL)) continue;
114
rccLibTranslateFree();