The following Service SAF sends a file bracketed by the strings "begin" and "end."
#include <string.h>
#include "nsapi.h"
NSAPI_PUBLIC int service_net_sendfile(pblock *pb, Session *sn, Request *rq)
{
char *path;
SYS_FILE fd;
struct sendfiledata sfd;
int rv;
path = pblock_findval("path", rq->vars);
fd = system_fopenRO(path);
if (!fd) {
log_error(LOG_MISCONFIG, "service-net-sendfile", sn, rq,
"Error opening %s (%s)", path, system_errmsg());
return REQ_ABORTED;
}
sfd.fd = fd; /* file to send */
sfd.offset = 0; /* start sending from the beginning */
sfd.len = 0; /* send the whole file */
sfd.header = "begin"; /* header data to send before the file */
sfd.hlen = strlen(sfd.header); /* length of header data */
sfd.trailer = "end"; /* trailer data to send after the file */
sfd.tlen = strlen(sfd.trailer); /* length of trailer data */
/* send the headers, file, and trailers to the client */
rv = net_sendfile(sn->csd, &sfd);
system_fclose(fd);
if (rv < 0) {
log_error(LOG_INFORM, "service-net-sendfile", sn, rq,
"Error sending %s (%s)", path,
system_errmsg());
return REQ_ABORTED;
}
return REQ_PROCEED;
}