Skip to content
Snippets Groups Projects
Commit a35f19e3 authored by rswindell's avatar rswindell
Browse files

Created C-exported functions: getsmsg and getnmsg - return user telegram and

node messages that must be freed by the caller (or NULL if no message).
parent c8cc5804
No related branches found
No related tags found
No related merge requests found
...@@ -1002,6 +1002,88 @@ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin) ...@@ -1002,6 +1002,88 @@ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin)
return(0); return(0);
} }
/****************************************************************************/
/* Returns any short messages waiting for user number, buffer must be freed */
/****************************************************************************/
char* DLLCALL getsmsg(scfg_t* cfg, int usernumber)
{
char str[MAX_PATH+1], HUGE16 *buf;
int i;
int file;
long length;
node_t node;
sprintf(str,"%smsgs/%4.4u.msg",cfg->data_dir,usernumber);
if(flength(str)<1L)
return(NULL);
if((file=nopen(str,O_RDWR))==-1)
return(NULL);
length=filelength(file);
if((buf=(char *)malloc(length+1))==NULL) {
close(file);
return(NULL);
}
if(read(file,buf,length)!=length) {
close(file);
free(buf);
return(NULL);
}
chsize(file,0L);
close(file);
buf[length]=0;
for(i=1;i<=cfg->sys_nodes;i++) { /* clear msg waiting flag */
getnodedat(cfg,i,&node,NULL);
if(node.useron==usernumber
&& (node.status==NODE_INUSE || node.status==NODE_QUIET)
&& node.misc&NODE_MSGW) {
getnodedat(cfg,i,&node,&file);
node.misc&=~NODE_MSGW;
putnodedat(cfg,i,&node,file);
}
}
return(buf); /* caller must free */
}
char* DLLCALL getnmsg(scfg_t* cfg, int node_num)
{
char str[MAX_PATH+1];
char* buf;
int file;
long length;
node_t node;
getnodedat(cfg,node_num,&node,&file);
node.misc&=~NODE_NMSG; /* clear the NMSG flag */
putnodedat(cfg,node_num,&node,file);
sprintf(str,"%smsgs/n%3.3u.msg",cfg->data_dir,node_num);
if(flength(str)<1L)
return(NULL);
if((file=nopen(str,O_RDWR))==-1)
return(NULL);
length=filelength(file);
if(!length) {
close(file);
return(NULL);
}
if((buf=(char *)malloc(length+1))==NULL) {
close(file);
return(NULL);
}
if(read(file,buf,length)!=length) {
close(file);
free(buf);
return(NULL);
}
chsize(file,0L);
close(file);
buf[length]=0;
return(buf); /* caller must free */
}
/****************************************************************************/ /****************************************************************************/
/* Creates a short message for node 'num' that contains 'strin' */ /* Creates a short message for node 'num' that contains 'strin' */
/****************************************************************************/ /****************************************************************************/
......
...@@ -88,7 +88,9 @@ DLLEXPORT void DLLCALL printnodedat(scfg_t* cfg, uint number, node_t* node); ...@@ -88,7 +88,9 @@ DLLEXPORT void DLLCALL printnodedat(scfg_t* cfg, uint number, node_t* node);
DLLEXPORT void DLLCALL packchatpass(char *pass, node_t* node); DLLEXPORT void DLLCALL packchatpass(char *pass, node_t* node);
DLLEXPORT char* DLLCALL unpackchatpass(char *pass, node_t* node); DLLEXPORT char* DLLCALL unpackchatpass(char *pass, node_t* node);
DLLEXPORT char* DLLCALL getsmsg(scfg_t* cfg, int usernumber);
DLLEXPORT int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin); DLLEXPORT int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin);
DLLEXPORT char* DLLCALL getnmsg(scfg_t* cfg, int node_num);
DLLEXPORT int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin); DLLEXPORT int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin);
DLLEXPORT uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, char *dat DLLEXPORT uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, char *dat
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment