/*
- * $Id$
- *
* Server functions which handle file transfers and room directories.
- *
*/
#include "sysdep.h"
#include "config.h"
#include "file_ops.h"
#include "sysdep_decls.h"
-#include "user_ops.h"
#include "support.h"
#include "room_ops.h"
#include "msgbase.h"
#endif
#include "ctdl_module.h"
+#include "user_ops.h"
/*
* network_talking_to() -- concurrency checker
*/
+static char *nttlist = NULL;
int network_talking_to(char *nodename, int operation) {
- static char *nttlist = NULL;
char *ptr = NULL;
int i;
char buf[SIZ];
return(retval);
}
+void cleanup_nttlist(void)
+{
+ begin_critical_section(S_NTTLIST);
+ if (nttlist != NULL)
+ free(nttlist);
+ nttlist = NULL;
+ end_critical_section(S_NTTLIST);
+}
{
FILE *fp;
char upload_notice[512];
+ static int seq = 0;
if (CC->upload_fp == NULL) {
cprintf("%d You don't have an upload file open.\n", ERROR + RESOURCE_NOT_OPEN);
CC->upload_fp = NULL;
if ((!strcasecmp(cmd, "1")) && (CC->upload_type != UPL_FILE)) {
- CC->upload_type = UPL_FILE;
cprintf("%d Upload completed.\n", CIT_OK);
- /* FIXME ... here we need to trigger a network run */
+ if (CC->upload_type == UPL_NET) {
+ char final_filename[PATH_MAX];
+ snprintf(final_filename, sizeof final_filename,
+ "%s/%s.%04lx.%04x",
+ ctdl_netin_dir,
+ CC->net_node,
+ (long)getpid(),
+ ++seq
+ );
+
+ if (link(CC->upl_path, final_filename) == 0) {
+ unlink(CC->upl_path);
+ }
+ else {
+ CtdlLogPrintf(CTDL_ALERT, "Cannot link %d to %d: %s\n",
+ CC->upl_path, final_filename, strerror(errno)
+ );
+ }
+ /* FIXME ... here we need to trigger a network run */
+ }
+
+ CC->upload_type = UPL_FILE;
return;
}
snprintf(CC->upl_path, sizeof CC->upl_path,
"%s/%s.%04lx.%04x",
- ctdl_netin_dir,
+ ctdl_nettmp_dir,
CC->net_node,
(long)getpid(),
++seq);
CTDL_MODULE_INIT(file_ops)
{
if (!threading) {
- CtdlRegisterProtoHook(cmd_delf, "DELF", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_movf, "MOVF", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_open, "OPEN", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_clos, "CLOS", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_uopn, "UOPN", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_ucls, "UCLS", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_read, "READ", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_writ, "WRIT", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_oimg, "OIMG", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_ndop, "NDOP", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_nuop, "NUOP", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_uimg, "UIMG", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_delf, "DELF", "Delete a file");
+ CtdlRegisterProtoHook(cmd_movf, "MOVF", "Move a file");
+ CtdlRegisterProtoHook(cmd_open, "OPEN", "Open a download file transfer");
+ CtdlRegisterProtoHook(cmd_clos, "CLOS", "Close a download file transfer");
+ CtdlRegisterProtoHook(cmd_uopn, "UOPN", "Open an upload file transfer");
+ CtdlRegisterProtoHook(cmd_ucls, "UCLS", "Close an upload file transfer");
+ CtdlRegisterProtoHook(cmd_read, "READ", "File transfer read operation");
+ CtdlRegisterProtoHook(cmd_writ, "WRIT", "File transfer write operation");
+ CtdlRegisterProtoHook(cmd_ndop, "NDOP", "Open a network spool file for download");
+ CtdlRegisterProtoHook(cmd_nuop, "NUOP", "Open a network spool file for upload");
+ CtdlRegisterProtoHook(cmd_oimg, "OIMG", "Open an image file for download");
+ CtdlRegisterProtoHook(cmd_uimg, "UIMG", "Upload an image file");
+ CtdlRegisterCleanupHook(cleanup_nttlist);
}
/* return our Subversion id for the Log */
- return "$Id$";
+ return "file_ops";
}