274 lines
6.7 KiB
C
274 lines
6.7 KiB
C
#ifndef _NCPLIB_H
|
|
#define _NCPLIB_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/ncp.h>
|
|
#include <linux/ncp_fs.h>
|
|
#include <linux/ipx.h>
|
|
|
|
typedef unsigned long IPXNet;
|
|
typedef unsigned short IPXPort;
|
|
typedef unsigned char IPXNode[IPX_NODE_LEN];
|
|
|
|
#define IPX_RIP_PTYPE (0x01)
|
|
#define IPX_SAP_PTYPE (0x04)
|
|
#define IPX_SAP_PORT (0x0452)
|
|
#define IPX_RIP_PORT (0x0453)
|
|
|
|
#define IPX_SAP_GENERAL_QUERY (0x0001)
|
|
#define IPX_SAP_GENERAL_RESPONSE (0x0002)
|
|
#define IPX_SAP_NEAREST_QUERY (0x0003)
|
|
#define IPX_SAP_NEAREST_RESPONSE (0x0004)
|
|
|
|
#define IPX_SAP_FILE_SERVER (0x0004)
|
|
|
|
struct sap_query {
|
|
unsigned short query_type; /* net order */
|
|
unsigned short server_type; /* net order */
|
|
};
|
|
|
|
struct sap_server_ident {
|
|
unsigned short server_type __attribute__ ((packed));
|
|
char server_name[48] __attribute__ ((packed));
|
|
IPXNet server_network __attribute__ ((packed));
|
|
IPXNode server_node __attribute__ ((packed));
|
|
IPXPort server_port __attribute__ ((packed));
|
|
unsigned short intermediate_network __attribute__ ((packed));
|
|
};
|
|
|
|
#define IPX_RIP_REQUEST (0x1)
|
|
#define IPX_RIP_RESPONSE (0x2)
|
|
|
|
struct ipx_rip_packet {
|
|
__u16 operation __attribute__ ((packed));
|
|
struct ipx_rt_def {
|
|
__u32 network __attribute__ ((packed));
|
|
__u16 hops __attribute__ ((packed));
|
|
__u16 ticks __attribute__ ((packed));
|
|
} rt[1] __attribute__ ((packed));
|
|
};
|
|
|
|
#define IPX_BROADCAST_NODE "\xff\xff\xff\xff\xff\xff"
|
|
#define IPX_THIS_NODE "\0\0\0\0\0\0"
|
|
|
|
#ifndef IPX_NODE_LEN
|
|
#define IPX_NODE_LEN (6)
|
|
#endif
|
|
|
|
void
|
|
ipx_print_node(IPXNode node);
|
|
void
|
|
ipx_print_network(IPXNet net);
|
|
void
|
|
ipx_print_port(IPXPort port);
|
|
void
|
|
ipx_print_saddr(struct sockaddr_ipx* sipx);
|
|
int
|
|
ipx_sscanf_node(char *buf, unsigned char node[IPX_NODE_LEN]);
|
|
void
|
|
ipx_assign_node(IPXNode dest, IPXNode src);
|
|
|
|
enum connect_state {
|
|
NOT_CONNECTED = 0,
|
|
CONN_MOUNTED,
|
|
CONN_SOCKET
|
|
};
|
|
|
|
struct ncp_server {
|
|
int current_size;
|
|
int has_subfunction;
|
|
int silent;
|
|
int ncp_reply_size;
|
|
char *packet;
|
|
int lock;
|
|
|
|
enum connect_state is_connected;
|
|
|
|
int mount_fid;
|
|
|
|
struct sockaddr_ipx addr;
|
|
int ncp_sock;
|
|
int wdog_sock;
|
|
int wdog_pid;
|
|
__u8 sequence;
|
|
__u16 connection;
|
|
int completion;
|
|
int conn_status;
|
|
int reply_size;
|
|
|
|
char ncp_data[NCP_PACKET_SIZE];
|
|
};
|
|
|
|
#include <linux/ncp.h>
|
|
|
|
int
|
|
ncp_connect_mount(struct ncp_server *server, const char *mount_point);
|
|
|
|
int
|
|
ncp_connect_addr(struct ncp_server *server, const struct sockaddr_ipx *target);
|
|
|
|
int
|
|
ncp_connect(struct ncp_server *server, const char *server_name);
|
|
|
|
int
|
|
ncp_disconnect(struct ncp_server *server);
|
|
|
|
int
|
|
ncp_negotiate_buffersize(struct ncp_server *server, int size,
|
|
int *target);
|
|
int
|
|
ncp_get_encryption_key(struct ncp_server *server,
|
|
char *target);
|
|
int
|
|
ncp_get_bindery_object_id(struct ncp_server *server,
|
|
int object_type, char *object_name,
|
|
struct ncp_bindery_object *target);
|
|
int
|
|
ncp_scan_bindery_object(struct ncp_server *server,
|
|
__u32 last_id, __u16 object_type, char *search_string,
|
|
struct ncp_bindery_object *target);
|
|
int
|
|
ncp_read_property_value(struct ncp_server *server,
|
|
int object_type, char *object_name,
|
|
int segment, char *prop_name,
|
|
struct nw_property *target);
|
|
int
|
|
ncp_login_encrypted(struct ncp_server *server,
|
|
struct ncp_bindery_object *object,
|
|
unsigned char *key,
|
|
unsigned char *passwd);
|
|
int
|
|
ncp_login_user(struct ncp_server *server,
|
|
unsigned char *username,
|
|
unsigned char *password);
|
|
int
|
|
ncp_get_volume_info_with_number(struct ncp_server *server, int n,
|
|
struct ncp_volume_info *target);
|
|
|
|
int
|
|
ncp_get_volume_number(struct ncp_server *server, const char *name,
|
|
int *target);
|
|
|
|
int
|
|
ncp_file_search_init(struct ncp_server *server,
|
|
int dir_handle, const char *path,
|
|
struct ncp_filesearch_info *target);
|
|
|
|
int
|
|
ncp_file_search_continue(struct ncp_server *server,
|
|
struct ncp_filesearch_info *fsinfo,
|
|
int attributes, const char *path,
|
|
struct ncp_file_info *target);
|
|
|
|
int
|
|
ncp_get_finfo(struct ncp_server *server,
|
|
int dir_handle, const char *path, const char *name,
|
|
struct ncp_file_info *target);
|
|
|
|
int
|
|
ncp_open_file(struct ncp_server *server,
|
|
int dir_handle, const char *path,
|
|
int attr, int access,
|
|
struct ncp_file_info *target);
|
|
int
|
|
ncp_close_file(struct ncp_server *server, const char *file_id);
|
|
|
|
int
|
|
ncp_create_newfile(struct ncp_server *server,
|
|
int dir_handle, const char *path,
|
|
int attr,
|
|
struct ncp_file_info *target);
|
|
|
|
int
|
|
ncp_create_file(struct ncp_server *server,
|
|
int dir_handle, const char *path,
|
|
int attr,
|
|
struct ncp_file_info *target);
|
|
|
|
int
|
|
ncp_erase_file(struct ncp_server *server,
|
|
int dir_handle, const char *path,
|
|
int attr);
|
|
|
|
int
|
|
ncp_rename_file(struct ncp_server *server,
|
|
int old_handle, const char *old_path,
|
|
int attr,
|
|
int new_handle, const char *new_path);
|
|
|
|
int
|
|
ncp_create_directory(struct ncp_server *server,
|
|
int dir_handle, const char *path,
|
|
int inherit_mask);
|
|
|
|
int
|
|
ncp_delete_directory(struct ncp_server *server,
|
|
int dir_handle, const char *path);
|
|
|
|
int
|
|
ncp_rename_directory(struct ncp_server *server,
|
|
int dir_handle,
|
|
const char *old_path, const char *new_path);
|
|
|
|
int
|
|
ncp_read(struct ncp_server *server, const char *file_id,
|
|
__u32 offset, __u16 to_read,
|
|
char *target, int *bytes_read);
|
|
|
|
int
|
|
ncp_write(struct ncp_server *server, const char *file_id,
|
|
__u32 offset, __u16 to_write,
|
|
const char *source, int *bytes_written);
|
|
|
|
int
|
|
ncp_do_lookup(struct ncp_server *server,
|
|
struct nw_info_struct *dir,
|
|
char *path, /* may only be one component */
|
|
struct nw_info_struct *target);
|
|
|
|
int
|
|
ncp_modify_file_or_subdir_dos_info(struct ncp_server *server,
|
|
struct nw_info_struct *file,
|
|
__u32 info_mask,
|
|
struct nw_modify_dos_info *info);
|
|
|
|
int
|
|
ncp_del_file_or_subdir(struct ncp_server *server,
|
|
struct nw_info_struct *dir, char *name);
|
|
|
|
|
|
int
|
|
ncp_open_create_file_or_subdir(struct ncp_server *server,
|
|
struct nw_info_struct *dir, char *name,
|
|
int open_create_mode,
|
|
__u32 create_attributes,
|
|
int desired_acc_rights,
|
|
struct nw_file_info *target);
|
|
|
|
int
|
|
ncp_initialize_search(struct ncp_server *server,
|
|
struct nw_info_struct *dir,
|
|
struct nw_search_sequence *target);
|
|
|
|
int
|
|
ncp_search_for_file_or_subdir(struct ncp_server *server,
|
|
struct nw_search_sequence *seq,
|
|
struct nw_info_struct *target);
|
|
|
|
int
|
|
ncp_ren_or_mov_file_or_subdir(struct ncp_server *server,
|
|
struct nw_info_struct *old_dir, char *old_name,
|
|
struct nw_info_struct *new_dir, char *new_name);
|
|
|
|
int
|
|
ncp_create_queue_job_and_file(struct ncp_server *server,
|
|
__u32 queue_id,
|
|
struct queue_job *job);
|
|
|
|
int
|
|
ncp_close_file_and_start_job(struct ncp_server *server,
|
|
__u32 queue_id,
|
|
struct queue_job *job);
|
|
|
|
#endif /* _NCPLIB_H */
|