00001 #include "drms.h"
00002 #include "drms_priv.h"
00003 #include "xmem.h"
00004
00005 static char *prot_string[] = {
00006 "generic",
00007 "bin",
00008 "bin.gz",
00009 "fitz",
00010 "fits",
00011 "msi",
00012 "tas",
00013 "dsds",
00014 "local",
00015 "fitzdep",
00016 "fitsdep"
00017 };
00018
00019 static char *prot_fileext[] = {
00020 "",
00021 ".bin",
00022 ".bin.gz",
00023 ".fits",
00024 ".fits",
00025 ".msi",
00026 ".tas",
00027 ".dsds",
00028 ".local",
00029 ".fitz",
00030 ".fits"
00031 };
00032
00033 static HContainer_t *gProtMap = NULL;
00034
00035 const int kMAXPROTSTR = 16;
00036
00037 DRMS_Protocol_t drms_str2prot (const char *str) {
00038 int status = DRMS_SUCCESS;
00039 DRMS_Protocol_t ret = DRMS_PROTOCOL_INVALID;
00040 DRMS_Protocol_t *ans = NULL;
00041
00042 if (!gProtMap)
00043 {
00044 gProtMap = hcon_create(sizeof(DRMS_Protocol_t), kMAXPROTSTR, NULL, NULL, NULL, NULL, 0);
00045
00046 if (gProtMap)
00047 {
00048 int iprot;
00049 for (iprot = 0; status == DRMS_SUCCESS && iprot < DRMS_PROTOCOL_END; iprot++)
00050 {
00051 if (hcon_insert(gProtMap, prot_string[iprot], (void *)&iprot))
00052 {
00053 status = DRMS_ERROR_CANTCREATEHCON;
00054 break;
00055 }
00056 }
00057 }
00058 else
00059 {
00060 status = DRMS_ERROR_CANTCREATEHCON;
00061 }
00062 }
00063
00064 if (status == DRMS_SUCCESS && gProtMap)
00065 {
00066 if ((ans = (DRMS_Protocol_t *)hcon_lookup(gProtMap, str)) != NULL)
00067 {
00068 ret = *ans;
00069 }
00070 }
00071
00072 return ret;
00073 }
00074
00075 const char *drms_prot2str (DRMS_Protocol_t prot) {
00076 if (prot > DRMS_PROTOCOL_INVALID && prot < DRMS_PROTOCOL_END)
00077 {
00078 return prot_string[prot];
00079 }
00080
00081 return NULL;
00082 }
00083
00084 const char *drms_prot2ext (DRMS_Protocol_t prot) {
00085 if (prot > DRMS_PROTOCOL_INVALID && prot < DRMS_PROTOCOL_END)
00086 {
00087 return prot_fileext[prot];
00088 }
00089
00090 return NULL;
00091 }
00092
00093 void drms_protocol_term() {
00094 if (gProtMap)
00095 {
00096 hcon_destroy(&gProtMap);
00097 }
00098 }