#include #include #include #include #include "afpfs-ng/afp.h" static int getstatus(char * address_string, unsigned int port) { struct afp_server *server; struct hostent *h; int ret; struct addrinfo * address; int j, firsttime=0; char signature_string[AFP_SIGNATURE_LEN*2+1]; struct afp_versions * tmpversion; if ((address = afp_get_address(NULL,address_string, port)) == NULL) return -1; server=afp_server_init(address); ret=afp_server_connect(server,1); if (ret<0) { perror("Connecting to server"); return -1; } printf("Server name: %s\n",server->server_name_printable); printf("Machine type: %s\n",server->machine_type); printf("AFP versions: \n"); for (j=0;jav_name;tmpversion++) { if (tmpversion->av_number==server->versions[j]) { printf(" %s\n",tmpversion->av_name); break; } } } printf("UAMs:\n"); for (j=1;j<0x100;j<<=1) { if (j & server->supported_uams) { printf(" %s\n", uam_bitmap_to_string(j)); firsttime=1; } }; for (j=0;jsignature[j])); printf("Signature: %s\n", signature_string); out: free(server); return 0; } static void usage(void) { printf("getstatus [afp_url|ipaddress[:port]]\n"); } int main(int argc, char * argv[]) { unsigned int port = 548; struct afp_url url; char * servername = argv[1]; pthread_t loop_thread; if (argc!=2) { usage(); return -1; } /* Parse the argument */ afp_default_url(&url); if (afp_parse_url(&url,argv[1],0)!=0) { char * p; /* This is not a url */ if ((p=strchr(servername,':'))!=0) { /* we have a port */ *p='\0'; p++; if ((port=atoi(p))<=0) { printf("Could not understand port %s\n",p); usage(); return -1; } } } else { servername = url.servername; port=url.port; } libafpclient_register(NULL); afp_main_quick_startup(NULL); if (getstatus(servername,port) == 0) { } else return -1; }