X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fadmin.c;h=84674be3a54f7fba2cf93d4c3c4faa5f394b8056;hp=a2873fac0f96c7326374ef1c06214724fff8e442;hb=2ba3d1d3bf2b57c7ac462b347cb18f06820ac73a;hpb=a6eef2e7073a7295d1a7bf09f538946135a5ebbb diff --git a/client/admin.c b/client/admin.c index a2873fa..84674be 100644 --- a/client/admin.c +++ b/client/admin.c @@ -1,40 +1,28 @@ /* - * $Log: admin.c,v $ - * Revision 1.6 2000-03-20 19:06:25 adam - * Added Segment request for fronend server. Work on admin for client. - * - * Revision 1.5 2000/03/17 12:47:02 adam - * Minor changes to admin client. - * - * Revision 1.4 2000/03/16 13:55:49 ian - * Added commands for sending shutdown and startup admin requests via the admin ES. - * - * Revision 1.3 2000/03/14 15:23:17 ian - * Removed unwanted ifdef and include of zes-admin.h - * - * Revision 1.2 2000/03/14 14:06:04 ian - * Minor change to order of debugging output for send_apdu, - * fixed encoding of admin request. - * - * Revision 1.1 2000/03/14 09:27:07 ian - * Added code to enable sending of admin extended service requests - * + * Copyright (C) 1995-2005, Index Data ApS + * See the file LICENSE for details. * + * $Id: admin.c,v 1.20 2005-06-24 19:56:52 adam Exp $ */ #include #include #include #include + +#if HAVE_DIRENT_H #include +#endif +#if HAVE_FNMATCH_H #include +#endif +#if HAVE_SYS_STAT_H #include +#endif + #include #include -#ifdef USE_XTIMOSI -#include -#endif #include #include @@ -42,16 +30,19 @@ #include +#include "admin.h" + /* Helper functions to get to various statics in the client */ ODR getODROutputStream(); -void send_apdu(Z_APDU *a); - +extern char *databaseNames[]; +extern int num_databaseNames; -int sendAdminES(int type, char* dbname, char* param1) +int sendAdminES(int type, char* param1) { ODR out = getODROutputStream(); - + char *dbname = odr_strdup (out, databaseNames[0]); + /* Type: 1=reindex, 2=truncate, 3=delete, 4=create, 5=import, 6=refresh, 7=commit */ Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest ); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; @@ -73,18 +64,22 @@ int sendAdminES(int type, char* dbname, char* param1) req->packageName = "1.Extendedserveq"; /* Allocate the external */ - r = req->taskSpecificParameters = (Z_External *) odr_malloc (out, sizeof(*r)); + r = req->taskSpecificParameters = (Z_External *) + odr_malloc (out, sizeof(*r)); r->direct_reference = odr_oiddup(out,oid); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_ESAdmin; - r->u.adminService = (Z_Admin *) odr_malloc(out, sizeof(*r->u.adminService)); + r->u.adminService = (Z_Admin *) + odr_malloc(out, sizeof(*r->u.adminService)); r->u.adminService->which = Z_Admin_esRequest; - r->u.adminService->u.esRequest = (Z_AdminEsRequest *) odr_malloc(out, sizeof(*r->u.adminService->u.esRequest)); - - toKeep = r->u.adminService->u.esRequest->toKeep = (Z_ESAdminOriginPartToKeep *) - odr_malloc(out, sizeof(*r->u.adminService->u.esRequest->toKeep)); - + r->u.adminService->u.esRequest = (Z_AdminEsRequest *) + odr_malloc(out, sizeof(*r->u.adminService->u.esRequest)); + + toKeep = r->u.adminService->u.esRequest->toKeep = + (Z_ESAdminOriginPartToKeep *) + odr_malloc(out, sizeof(*r->u.adminService->u.esRequest->toKeep)); + toKeep->which=type; toKeep->databaseName = dbname; switch ( type ) @@ -96,21 +91,20 @@ int sendAdminES(int type, char* dbname, char* param1) case Z_ESAdminOriginPartToKeep_truncate: toKeep->u.truncate=odr_nullval(); break; - case Z_ESAdminOriginPartToKeep_delete: - toKeep->u.delete=odr_nullval(); + case Z_ESAdminOriginPartToKeep_drop: + toKeep->u.drop=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_create: toKeep->u.create=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_import: - toKeep->u.import = (Z_ImportParameters*)odr_malloc(out, sizeof(*toKeep->u.import)); + toKeep->u.import = (Z_ImportParameters*) + odr_malloc(out, sizeof(*toKeep->u.import)); toKeep->u.import->recordType=param1; - toKeep->databaseName = dbname; /* Need to add additional setup of records here */ break; case Z_ESAdminOriginPartToKeep_refresh: toKeep->u.refresh=odr_nullval(); - toKeep->databaseName = dbname; break; case Z_ESAdminOriginPartToKeep_commit: toKeep->u.commit=odr_nullval(); @@ -125,7 +119,7 @@ int sendAdminES(int type, char* dbname, char* param1) /* Unknown admin service */ break; } - + notToKeep = r->u.adminService->u.esRequest->notToKeep = (Z_ESAdminOriginPartNotToKeep *) odr_malloc(out, sizeof(*r->u.adminService->u.esRequest->notToKeep)); @@ -137,46 +131,46 @@ int sendAdminES(int type, char* dbname, char* param1) return 0; } -/* cmd_adm_reindex +/* cmd_adm_reindex Ask the specified database to fully reindex itself */ -int cmd_adm_reindex(char* arg) +int cmd_adm_reindex(const char *arg) { - sendAdminES(Z_ESAdminOriginPartToKeep_reIndex,arg,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_reIndex, NULL); return 2; } -/* cmd_adm_truncate +/* cmd_adm_truncate Truncate the specified database, removing all records and index entries, but leaving the database & it's explain information intact ready for new records */ -int cmd_adm_truncate(char* arg) +int cmd_adm_truncate(const char *arg) { if ( arg ) { - sendAdminES(Z_ESAdminOriginPartToKeep_truncate,arg,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_truncate, NULL); return 2; } return 0; } -/* cmd_adm_create +/* cmd_adm_create Create a new database */ -int cmd_adm_create(char* arg) +int cmd_adm_create(const char *arg) { if ( arg ) { - sendAdminES(Z_ESAdminOriginPartToKeep_create,arg,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_create, NULL); return 2; } return 0; } -/* cmd_adm_delete - Delete a database */ -int cmd_adm_delete(char* arg) +/* cmd_adm_drop + Drop (Delete) a database */ +int cmd_adm_drop(const char *arg) { if ( arg ) { - sendAdminES(Z_ESAdminOriginPartToKeep_delete,arg,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_drop, NULL); return 2; } return 0; @@ -187,10 +181,8 @@ int cmd_adm_delete(char* arg) N.B. That in this case, the import may contain instructions to delete records as well as new or updates to existing records */ -extern char *databaseNames[]; -extern int num_databaseNames; - -int cmd_adm_import(char *arg) +#if HAVE_FNMATCH_H +int cmd_adm_import(const char *arg) { char type_str[20], dir_str[1024], pattern_str[1024]; char *cp; @@ -199,6 +191,7 @@ int cmd_adm_import(char *arg) struct dirent *ent; int chunk = 10; Z_APDU *apdu = 0; + Z_Segment *segment = 0; ODR out = getODROutputStream(); if (arg && sscanf (arg, "%19s %1023s %1023s", type_str, @@ -210,9 +203,8 @@ int cmd_adm_import(char *arg) if (!dir) return 0; - sendAdminES(Z_ESAdminOriginPartToKeep_import,*databaseNames, - type_str); - + sendAdminES(Z_ESAdminOriginPartToKeep_import, type_str); + printf ("sent es request\n"); if ((cp=strrchr(dir_str, '/')) && cp[1] == 0) sep=""; @@ -230,9 +222,8 @@ int cmd_adm_import(char *arg) if (S_ISREG(status.st_mode) && (inf = fopen(fname, "r"))) { - Z_Segment *segment; Z_NamePlusRecord *rec; - Odr_oct *oct = odr_malloc (out, sizeof(*oct)); + Odr_oct *oct = (Odr_oct *) odr_malloc (out, sizeof(*oct)); if (!apdu) { @@ -251,7 +242,7 @@ int cmd_adm_import(char *arg) rec->u.intermediateFragment->u.notExternallyTagged = oct; oct->len = oct->size = status.st_size; - oct->buf = odr_malloc (out, oct->size); + oct->buf = (unsigned char *) odr_malloc (out, oct->size); fread (oct->buf, 1, oct->size, inf); fclose (inf); @@ -266,88 +257,28 @@ int cmd_adm_import(char *arg) } } if (apdu) - { - printf ("sending last packet\n"); send_apdu(apdu); - } apdu = zget_APDU(out, Z_APDU_segmentRequest); - printf ("sending end of sequence packet\n"); send_apdu (apdu); closedir(dir); return 2; } - -int cmd_adm_import2(char* arg) +#else +int cmd_adm_import(const char *arg) { - /* Size of chunks we wish to read from import file */ - size_t chunk_size = 8192; - - /* Buffer for reading chunks of data from import file */ - char chunk_buffer[chunk_size]; - - if ( arg ) - { - char dbname_buff[32]; - char rectype_buff[32]; - char filename_buff[32]; - FILE* pImportFile = NULL; - - if (sscanf (arg, "%s %s %s", dbname_buff, rectype_buff, filename_buff) != 3) - { - printf("Must specify database-name, record-type and filename for import\n"); - return 0; - } - - /* Attempt to open the file */ - - pImportFile = fopen(filename_buff,"r"); - - /* This chunk of code should move into client.c sometime soon for sending files via the update es */ - /* This function will then refer to the standard client.c one for uploading a file using es update */ - if ( pImportFile ) - { - int iTotalWritten = 0; - - /* We opened the import file without problems... So no we send the es request, ready to - start sending fragments of the import file as segment messages */ - sendAdminES(Z_ESAdminOriginPartToKeep_import,arg,rectype_buff); - - while ( ! feof(pImportFile ) ) - { - /* Read buffer_size bytes from the file */ - size_t num_items = fread((void*)chunk_buffer, 1, sizeof(chunk_buffer), pImportFile); - - /* Write num_bytes of data to */ - - if ( feof(pImportFile ) ) - { - /* This is the last chunk... Write it as the last fragment */ - printf("Last segment of %d bytes\n", num_items); - } - else if ( iTotalWritten == 0 ) - { - printf("First segment of %d bytes\n",num_items); - } - else - { - printf("Writing %d bytes\n", num_items); - } - - iTotalWritten += num_items; - } - } - return 2; - } + printf ("not available on WIN32\n"); return 0; } +#endif + /* "Freshen" the specified database, by checking metadata records against the sources from which they were generated, and creating a new record if the source has been touched since the last extraction */ -int cmd_adm_refresh(char* arg) +int cmd_adm_refresh(const char *arg) { if ( arg ) { - sendAdminES(Z_ESAdminOriginPartToKeep_refresh,arg,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_refresh, NULL); return 2; } return 0; @@ -355,21 +286,20 @@ int cmd_adm_refresh(char* arg) /* cmd_adm_commit Make imported records a permenant & visible to the live system */ -int cmd_adm_commit(char* arg) +int cmd_adm_commit(const char *arg) { - sendAdminES(Z_ESAdminOriginPartToKeep_commit,NULL,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_commit, NULL); return 2; } -int cmd_adm_shutdown(char* arg) +int cmd_adm_shutdown(const char *arg) { - sendAdminES(Z_ESAdminOriginPartToKeep_shutdown,NULL,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_shutdown, NULL); return 2; } -int cmd_adm_startup(char* arg) +int cmd_adm_startup(const char *arg) { - sendAdminES(Z_ESAdminOriginPartToKeep_start,NULL,NULL); + sendAdminES(Z_ESAdminOriginPartToKeep_start, NULL); return 2; } -