⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 options.cc

📁 remote installation server.
💻 CC
📖 第 1 页 / 共 2 页
字号:
	// valid CSA?	if(CSA_types[i].arch_name == NULL)	{		log->Event(LEVEL_ERR, "AddService:parse", 1,		   "Unknown client system architecture");		return;	}	// assign the info	serv_ptr = new services_t;	serv_ptr->csa = CSA_types[i].arch_id;	// min layer	ptr = strtok(NULL, ",");	if(ptr == NULL)	{		log->Event(LEVEL_ERR, "AddService:parse", 1,		   "Invalid service declaration");		delete serv_ptr;		return;	}	serv_ptr->min_level = atoi(ptr);		// max layer	ptr = strtok(NULL, ",");	if(ptr == NULL)	{		log->Event(LEVEL_ERR, "AddService:parse", 1,		   "Invalid service declaration");		delete serv_ptr;		return;	}	serv_ptr->max_level = atoi(ptr);	// basename	ptr = strtok(NULL, ",");	if(ptr == NULL)	{		log->Event(LEVEL_ERR, "AddService:parse", 1,		   "Invalid service declaration");		delete serv_ptr;		return;	}	serv_ptr->filebase = new char[strlen(ptr)+1];	strcpy(serv_ptr->filebase, ptr);	// menu entry	ptr = strtok(NULL, "\0");	if(ptr == NULL)	{		log->Event(LEVEL_ERR, "AddService:parse", 1,		   "Invalid service declaration");		delete[] serv_ptr->filebase;		delete serv_ptr;		return;	}	if(strlen(ptr) > 255)	{		log->Event(LEVEL_ERR, "AddService:parse", 1,			"Menu item too long");		delete[] serv_ptr->filebase;		delete serv_ptr;		return;	}	serv_ptr->menu_text = new char[strlen(ptr)+1];	strcpy(serv_ptr->menu_text, ptr);	if(strcmp(serv_ptr->filebase, "local") == 0)		serv_ptr->menu_id = 0;	else	{		serv_ptr->menu_id = *key_id;		(*key_id)++;	}	// find the tail of the list	for(serv_prev=serv_tail=serv_head; serv_tail != NULL;	 serv_tail=serv_tail->next)		serv_prev = serv_tail;	// append + sort out minor faults	if(serv_tail == serv_prev) // on head		serv_head = serv_ptr;	else		serv_prev->next = serv_ptr;	// end of list	serv_ptr->next = NULL;}/****************************************************************************** * GetMTFTPAddr - return the multicast address of the mtftp daemon            * ******************************************************************************/uint32_tOptions::GetMTFTPAddr(){	return(mtftp_address);}/****************************************************************************** * GetMTFTPAddr - return the multicast address of the mtftp daemon            * ******************************************************************************/uint32_tOptions::GetDefAddr(){	return(default_address);}/****************************************************************************** * GetMTFTPsport - return the multicast server port of the mtftp daemon       * ******************************************************************************/uint16_tOptions::GetMTFTPsport(){	return(mtftp_sport);}/****************************************************************************** * GetMTFTPcport - return the multicast client port of the mtftp daemon       * ******************************************************************************/uint16_tOptions::GetMTFTPcport(){	return(mtftp_cport);}/****************************************************************************** * GetMenuTimeout - return the amount of time the boot menu is shown for      * ******************************************************************************/uint8_tOptions::GetMenuTimeout(){	return(prompt_timeout);}/****************************************************************************** * GetMenuPrompt - return the menu string                                     * ******************************************************************************/char *Options::GetMenuPrompt(){	char *c = new char[strlen(prompt)+1];	strcpy(c, prompt);	return(c);}/****************************************************************************** * CheckMenu - check to see if there is a menu item for a specific CSA        * ******************************************************************************/uint16_tOptions::CheckMenu(uint16_t reqcsa){	services_t *serv_ptr;	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if(serv_ptr->csa == reqcsa)			return(serv_ptr->csa);		serv_ptr = serv_ptr->next;	}	return((uint16_t)-1);}/****************************************************************************** * MakeBootMenu - make the option for the boot menu                           * ******************************************************************************/option *Options::MakeBootMenu(int csa, int *arch_id, int *menu_id){	int i,j;	uint16_t menu_id_n;	int count = 0;	services_t *serv_ptr;	option *opt = new option;	opt->len = i = 0;	// work out how much memory we need	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if(serv_ptr->csa == csa)			opt->len += strlen(serv_ptr->menu_text)+3;		serv_ptr = serv_ptr->next;	}	opt->data = new uint8_t[opt->len];		// copy the menu items	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if(serv_ptr->csa == csa)		{			menu_id_n = htons(serv_ptr->menu_id);			memcpy(opt->data+i, &menu_id_n, 2);			i += 2;			j = strlen(serv_ptr->menu_text);			opt->data[i] = j;			i++;			memcpy(opt->data+i, serv_ptr->menu_text, j);			i += j;			if(0 == count)			{				*arch_id = serv_ptr->csa;				*menu_id = serv_ptr->menu_id;			}			count++;		}		serv_ptr = serv_ptr->next;	}		// last check	if(0 == opt->len)		return(NULL);	return(opt);}/****************************************************************************** * GetMinLayer - get the lowest layer for this item                           * ******************************************************************************/uint8_tOptions::GetMinLayer(int arch_id, int menu_id){	services_t *serv_ptr;	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if((menu_id == serv_ptr->menu_id) &&		  (arch_id == serv_ptr->csa))		  			break;		serv_ptr = serv_ptr->next;	}	if(NULL == serv_ptr)		return(0);	return(serv_ptr->min_level);}/****************************************************************************** * GetMaxLayer - get the highest layer for this item                          * ******************************************************************************/uint8_tOptions::GetMaxLayer(int arch_id, int menu_id){	services_t *serv_ptr;	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if((menu_id == serv_ptr->menu_id) &&		  (arch_id == serv_ptr->csa))		  			break;		serv_ptr = serv_ptr->next;	}	if(NULL == serv_ptr)		return(0);	return(serv_ptr->max_level);}/****************************************************************************** * MakeFilename - make the boot filename for a specific arch/layer            * ******************************************************************************/char *Options::MakeFilename(int menu_id, int arch_id, uint8_t layer){	services_t *serv_ptr;	char *tmpc;	int i;	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if((menu_id == serv_ptr->menu_id) &&		  (arch_id == serv_ptr->csa))		  			break;		serv_ptr = serv_ptr->next;	}	if(NULL == serv_ptr)		return(NULL);	if((layer < serv_ptr->min_level) || (serv_ptr->max_level < layer))		return(NULL);	// search for the arch name	for(i=0; i != CSA_types[i].arch_id; i++);	tmpc = new char[strlen(CSA_types[i].arch_name) +	  (strlen(serv_ptr->filebase)*2) + 8];	sprintf(tmpc, "%s/%s/%s.%d", CSA_types[i].arch_name,	  serv_ptr->filebase, serv_ptr->filebase, layer);	return(tmpc);}/****************************************************************************** * CheckLayer - see if the layer requested is withing the valid range         * ******************************************************************************/intOptions::CheckLayer(int menu_id, int arch_id, uint8_t layer){	services_t *serv_ptr;	serv_ptr = serv_head;	while(NULL != serv_ptr)	{		if((menu_id == serv_ptr->menu_id) &&		  (arch_id == serv_ptr->csa))		  			break;		serv_ptr = serv_ptr->next;	}	if(NULL == serv_ptr)		return(-1);	if((layer < serv_ptr->min_level) || (serv_ptr->max_level < layer))		return(-1);	return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -