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
Branches
Tags
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