예제 #1
0
/**
 * Convert IP address or domain name and port into struct sockaddr_in
 */
struct sockaddr_in addr_parse(char* ip, int port) {
	struct sockaddr_in taddr;
	int ret;

	memset(&taddr, 0x00, sizeof(taddr));

	taddr.sin_family = AF_INET;
	taddr.sin_port = htons(otcfg_target_port);
	ret = inet_aton(ip, &taddr.sin_addr);
	if (ret == 0) {
		char* ipstr = NULL;

		OT_LOGI("Resolving domain name `%s'\n", otcfg_target_host);

		ipstr = dns_query(ip, NULL);
		if (ipstr == NULL) {
			OT_LOGE("Could not resolve domain `%s'\n", otcfg_target_host);
			return taddr;
		}
		else {
			OT_LOGI("Resolved domain: %s --> %s\n", otcfg_target_host, ipstr);
		}

		inet_aton(ipstr, &taddr.sin_addr);
	}

	return taddr;
}
예제 #2
0
//----------------------------------------------------------------------------
//resolve domain name
unsigned char dns_resolve (char *name)
{
    dns_state = DNS_STATE_IDLE;
  
    dns_query(name);

    if (dns_state != DNS_STATE_REQ_SENT)
    {
        return(1);
    }
    gp_timer = 30; //is decremented in timer.c

    do
    {
        eth_get_data();
    }
    while ( (dns_state == DNS_STATE_REQ_SENT) &&
          (gp_timer > 0                   )     );
          
    if ( ( dns_state != DNS_STATE_FINISHED) ||
         ( gp_timer == 0 )                       )
    {
        return(1);
    }
    return (0);
}
예제 #3
0
파일: main.c 프로젝트: MikeJeong/FWlib-dev
static int8 mn_dns(menu_ctrl mctrl, int8 *mbuf)
{
	uint8 domain_ip[4];

	if(mctrl == MC_START) {
		printf("Enter the Domain name you want to check (ex: www.abc.com)\r\n");
	} else if(mctrl == MC_END) {

	} else if(mctrl == MC_DATA) {	//printf("start dns\r\n");
		if(mbuf[0] == 0 || strchr((char*)mbuf, '.') == NULL) {
			printf("wrong input(%s)\r\n", mbuf);
			return RET_NOK;
		}

		if(dns_query(SOCK_DNS, (uint8*)mbuf, domain_ip) == RET_OK) {
			printf("IP Address of (%s) is (%d.%d.%d.%d)\r\n", mbuf,
				domain_ip[0], domain_ip[1], domain_ip[2], domain_ip[3]);
		}else {
			printf("DNS fail\r\n");
		}
		return RET_OK;
	}

	return RET_NOK;
}
예제 #4
0
파일: dns_resolve.c 프로젝트: 020gzh/linux
/**
 * dns_resolve_server_name_to_ip - Resolve UNC server name to ip address.
 * @unc: UNC path specifying the server (with '/' as delimiter)
 * @ip_addr: Where to return the IP address.
 *
 * The IP address will be returned in string form, and the caller is
 * responsible for freeing it.
 *
 * Returns length of result on success, -ve on error.
 */
int
dns_resolve_server_name_to_ip(const char *unc, char **ip_addr)
{
	struct sockaddr_storage ss;
	const char *hostname, *sep;
	char *name;
	int len, rc;

	if (!ip_addr || !unc)
		return -EINVAL;

	len = strlen(unc);
	if (len < 3) {
		cifs_dbg(FYI, "%s: unc is too short: %s\n", __func__, unc);
		return -EINVAL;
	}

	/* Discount leading slashes for cifs */
	len -= 2;
	hostname = unc + 2;

	/* Search for server name delimiter */
	sep = memchr(hostname, '/', len);
	if (sep)
		len = sep - hostname;
	else
		cifs_dbg(FYI, "%s: probably server name is whole unc: %s\n",
			 __func__, unc);

	/* Try to interpret hostname as an IPv4 or IPv6 address */
	rc = cifs_convert_address((struct sockaddr *)&ss, hostname, len);
	if (rc > 0)
		goto name_is_IP_address;

	/* Perform the upcall */
	rc = dns_query(NULL, hostname, len, NULL, ip_addr, NULL);
	if (rc < 0)
		cifs_dbg(FYI, "%s: unable to resolve: %*.*s\n",
			 __func__, len, len, hostname);
	else
		cifs_dbg(FYI, "%s: resolved: %*.*s to %s\n",
			 __func__, len, len, hostname, *ip_addr);
	return rc;

name_is_IP_address:
	name = kmalloc(len + 1, GFP_KERNEL);
	if (!name)
		return -ENOMEM;
	memcpy(name, hostname, len);
	name[len] = 0;
	cifs_dbg(FYI, "%s: unc is IP, skipping dns upcall: %s\n",
		 __func__, name);
	*ip_addr = name;
	return 0;
}
예제 #5
0
struct hostent * gethostbyaddr(const void *addr, socklen_t len,
		int type) {
	int ret;
	struct hostent *he;
	struct dns_result result;
	struct dns_rr *rr;
	struct in_addr in;
	char hostaddr[] = "xxx.xxx.xxx.xxx.in-addr.arpa";
	size_t i;

	if ((type != AF_INET) || (len != sizeof in)) {
		return NULL; /* error: IPv4 supported only */
	}

	memcpy(&in, addr, sizeof in);
	in.s_addr = swab32(in.s_addr);

	if (0 > snprintf(&hostaddr[0], ARRAY_SIZE(hostaddr),
			"%s.in-addr.arpa", inet_ntoa(in))) {
		return NULL;
	}

	ret = dns_query(&hostaddr[0], DNS_RR_TYPE_PTR, DNS_RR_CLASS_IN, &result);
	if (ret != 0) {
		h_errno = HOST_NOT_FOUND;
		return NULL;
	}

	if (((he = hostent_create()) == NULL)
			|| (hostent_set_addr_info(he, AF_INET, len) != 0)
			|| (hostent_add_addr(he, addr) != 0)) {
		dns_result_free(&result);
		return NULL;
	}

	for (i = 0, rr = result.an; i < result.ancount; ++i, ++rr) {
		switch (rr->rtype) {
		default:
			ret = 0;
			break;
		case DNS_RR_TYPE_PTR:
			ret = hostent_set_name(he, &rr->rdata.ptr.ptrdname[0]);
			break;
		}
		if (ret != 0) {
			dns_result_free(&result);
			return NULL;
		}
	}

	dns_result_free(&result);

	return he;
}
예제 #6
0
ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
		struct sockaddr *sa, size_t salen)
{
	ssize_t ret;
	char *ip_addr = NULL;
	int ip_len;

	ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL);
	if (ip_len > 0)
		ret = rpc_pton(ip_addr, ip_len, sa, salen);
	else
		ret = -ESRCH;
	kfree(ip_addr);
	return ret;
}
예제 #7
0
int main(int argc, char **argv) {
	int ret;
	struct dns_result result;
	struct dns_rr *rr;
	size_t i;

	if (argc != 2) {
		printf("Usage: %s name\n", argv[0]);
		return -EINVAL;
	}

	ret = dns_query(argv[1], DNS_RR_TYPE_A, DNS_RR_CLASS_IN, &result);
	if (ret != 0) {
		return ret;
	}

	/* lookup info */
	printf("Server: %s\n", dns_get_nameserver());
	printf("Address: %s#%d\n", dns_get_nameserver(), DNS_PORT_NUMBER);

	/* answer */
	printf("\n%s:\n", result.nscount != 0 ? "Authoritative answer"
			: "Non-authoritative answer");
	for (i = 0, rr = result.an; i < result.ancount; ++i, ++rr) {
		if (rr->rtype == DNS_RR_TYPE_A) {
			printf("Name: %s\tAddress: %s\n", &rr->rname[0],
					inet_ntoa(*(struct in_addr *)&rr->rdata.a.address[0]));
		}
	}

	/* authoritive */
	if (result.nscount != 0) {
		printf("\nAuthoritative nameservers:\n");
		for (i = 0, rr = result.ns; i < result.nscount; ++i, ++rr) {
			printf("Name: %s\tNameserver: %s\n", &rr->rname[0],
					&rr->rdata.ns.nsdname[0]);
		}
	}

	dns_result_free(&result);

	return 0;
}
void resolver_lookup_impl(Callback<Error, std::string> callback,
                          Settings settings,
                          SharedPtr<Reactor> reactor,
                          SharedPtr<Logger> logger) {
  dns_query("IN", "A", "whoami.akamai.net",
      [=](Error error, SharedPtr<dns::Message> message) {
        if (!error) {
          for (auto answer : message->answers) {
            if (answer.ipv4 != "") {
              logger->debug("ip address of resolver is %s",
                            answer.ipv4.c_str());
              callback(NoError(), answer.ipv4);
              return;
            }
          }
        } else {
          logger->debug("failed to lookup resolver ip address");
          callback(error, "");
          return;
        }
      }, settings, reactor, logger);
}
예제 #9
0
static int lib_dns_query(FAR const char *hostname,
                         FAR struct sockaddr *addr, socklen_t *addrlen)
{
  int sd;
  int ret;

  /* Create and bind a socket to the DNS server */

  sd = dns_bind();
  if (sd < 0)
    {
      return sd;
    }

  /* Perform the query to get the IP address */

  ret = dns_query(sd, hostname, addr, addrlen);

  /* Release the socket */

  close(sd);
  return ret;
}
예제 #10
0
파일: main.c 프로젝트: MikeJeong/FWlib-dev
static int8 mn_email(menu_ctrl mctrl, int8 *mbuf)
{
#define SET_STAGE(next_name_v, cur_var_v) \
{ \
	if(strlen((char*)mbuf) > 31) printf("buf overflow - try again\r\n"); \
	else { \
		strcpy((char*)cur_var_v, (char*)mbuf); \
		printf("Type a "next_name_v"\r\n"); \
		stage++; \
	} \
}
	uint8 ret;
	static uint8 stage = 0, ip[4];
	static int8 sender[32], passwd[32], recipient[32], subject[32];

	if(mctrl == MC_START) {
		printf("Enter Mail Server Address [Domain Name/IP Address]\r\n");
	} else if(mctrl == MC_END) {
		stage = 0;
	} else if(mctrl == MC_DATA) {
		switch(stage) {
		case 0:	// Server IP
			if(ip_check(mbuf, ip) == RET_NOK) {
				if(dns_query(SOCK_DNS, (void *)mbuf, ip) == RET_OK) {
					printf("DNS success - IP Address is (%d.%d.%d.%d)\r\n\r\n",	
						ip[0], ip[1], ip[2], ip[3]);
					printf("Type a Sender\r\n");
					stage = 1;
				} else {
					printf("DNS failed\r\n\r\n");
					printf("Enter Mail Server Address [Domain Name/IP Address]\r\n");
				}
			} else {
				printf("Type a Sender\r\n");
				stage = 1;
			}
			break;
		case 1:	// Sender
			SET_STAGE("Password", sender);
			break;
		case 2:	// Password
			SET_STAGE("Recipient", passwd);
			break;
		case 3:	// Recipient
			SET_STAGE("Subject", recipient);
			break;
		case 4:	// Subject
			SET_STAGE("message" , subject); 
			break;
		case 5:	// Message
			ret = send_mail(SOCK_SMTP, (uint8*)sender, (uint8*)passwd, 
				(uint8*)recipient, (uint8*)subject, (uint8*)mbuf, ip);
			if(ret == RET_OK) printf("mail send success\r\n");
			else printf("mail send fail\r\n");
			return RET_OK;
		default: printf("wrong stage(%d)\r\n", stage);
		}
	}

	return RET_NOK;

#undef SET_STAGE
}
예제 #11
0
int ot_accept_client(int fd) {
	int tfd;
	int ret;
	int flags;
	struct sockaddr_in taddr;

	taddr.sin_family = AF_INET;
	taddr.sin_port = htons(otcfg_target_port);
	ret = inet_aton(otcfg_target_host, &taddr.sin_addr);
	if (ret == 0) {
		char* ipstr = NULL;

		OT_LOGI("Resolving domain name `%s'\n", otcfg_target_host);

		ipstr = dns_query(otcfg_target_host, NULL);
		if (ipstr == NULL) {
			OT_LOGW("Could not resolve domain `%s'\n", otcfg_target_host);
			shutdown(fd, SHUT_RDWR);
			close(fd);
			exit(-3);
		}
		else {
			OT_LOGI("Resolved domain: %s --> %s\n", otcfg_target_host, ipstr);
		}

		inet_aton(ipstr, &taddr.sin_addr);
	}


	// 连接到目标服务器
	tfd = socket(AF_INET, SOCK_STREAM, 0);
	if (tfd <= 0) {
		perror("sub socket");
		shutdown(fd, SHUT_RDWR);
		close(fd);
		exit(-1);
	}

	OT_LOGI("Connecting to %s:%d\n", inet_ntoa(taddr.sin_addr), ntohs(taddr.sin_port));
	ret = connect(tfd, (struct sockaddr*)&taddr, sizeof(taddr));
	if (ret < 0) {
		perror("sub connect");
		shutdown(fd, SHUT_RDWR);
		close(fd);
		close(tfd);
		exit(-2);
	}

	flags = fcntl(tfd, F_GETFL, 0);
	/*
	ret = fcntl(tfd, F_SETFL, flags | O_NONBLOCK);
	if (ret == -1) {
		perror("sub fcntl");
		shutdown(fd, SHUT_RDWR);
		shutdown(tfd, SHUT_RDWR);
		close(tfd);
		close(fd);
		exit(-1);
	}
	*/

	printf("Connected to target host %s:%d\n", otcfg_target_host, otcfg_target_port);

	/// 转发
	ot_tunneling_tcp(fd, tfd);

	shutdown(fd, SHUT_RDWR);
	shutdown(tfd, SHUT_RDWR);

	close(tfd);

	return 0;
}
예제 #12
0
파일: main.c 프로젝트: KISSMonX/W7200
/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{  
	uint16 i; 
        RCC_Configuration(); // Configure the system clocks
	NVIC_Configuration(); // NVIC Configuration
	GPIO_Configuration();
	USART1_Init(115200);
	Timer_Configuration();
        
        printf("============================================\r\n");
	printf("   HTTP client for W5200 \r\n");
	printf("============================================\r\n");
       
	WIZ_SPI_Init();	
        Reset_W5200();
        wizInit();
        InitNetInfo();
        DisplayNetInfo();
	              
        // LED3 and LED4 On!
	LED3_onoff(ON);
	LED4_onoff(ON);
     
       
        uint8  url[MAX_URL_SIZE];			//full url
	uint8  url_dn[MAX_URL_SIZE];			//domain name url
	uint8  url_path[MAX_URL_SIZE];		//local path in html server
	char * split;				//string split pointer 
	
	
	uint16 done_http = 0;
	uint16 start_idx = 0 ;
	uint16 end_idx = 0;
	uint16 tmp_start;
	uint16 tmp_end;
	uint8 BR [4]= "<BR>";
	uint8 rBR [4]= "\r\n";
	uint8 TITLE [7]= "<TITLE>";
	uint8 bTITLE [8]= "</TITLE>";
	

	uint16 tmp_idx;
	uint8 no_pr = 0;
	uint8 str[17];
       
	
            while (1)
            {
                          
              sprintf((char*)str,"%.3d.%.3d.%.3d.%.3d ",
				IINCHIP_READ (SIPR0+0), IINCHIP_READ (SIPR0+1), 
				IINCHIP_READ (SIPR0+2), IINCHIP_READ (SIPR0+3));
                            
                           
                            /* Get Http Address  */
                            printf("\r\n Please enter a HTTP Address without 'http://' \n\r"); 
                            printf("http://");
                            memset(url,0,sizeof(url));	
                            //Modified by Gang 2011-10-04
                            zScanf_s(1, url);
                            printf("\r\n Your HTTP address is: %s \r\n",url);		
                            
                            /* Parse URL Path  */
                            split = strchr((char const*)url,'/');			
                            strcpy((char*)url_path,split); 			
                            printf("Domain path: %s \r\n",url_path);
                    
                            /* Parse URL Domain  */
                            split = strtok((char*)url,"/");			
                            strcpy((char*)url_dn,split);				
                            printf("Domain name: %s \r\n",url_dn);
                            
               
                            /* Do DNS Client */
                            memset(httpclient_NetInfo.HTTPs_IP,0,sizeof(httpclient_NetInfo.HTTPs_IP));
                            //Delay_ms(10);
                            done_dns = dns_query(DNS_SOCK, url_dn, httpclient_NetInfo.HTTPs_IP);
                            printf("\r\n HTTPs_IP= %d.%d.%d.%d",httpclient_NetInfo.HTTPs_IP[0],httpclient_NetInfo.HTTPs_IP[1],httpclient_NetInfo.HTTPs_IP[2],httpclient_NetInfo.HTTPs_IP[3]);
                          
                            while(done_dns) {
                            
                            /* Do HTTP Client */
                            done_http = http_client(HTTPC_SOCK, httpclient_NetInfo.HTTPs_IP, url_path, url_dn,data_buf);
                           
                            if(done_http) { // on success, done_dns is not  '0'
                                            
    #define Recieved_DATA
    #ifdef Recieved_DATA
                                            printf("\r\n<< Recieved Data -- START>> \r\n");
                                           
                                            for(i=0; i<done_http; i++){
                                                  
                                                  printf("%c",(uint8)data_buf[i]);
                                              }   
                                            printf("\r\n");
                                            printf("<< Recieved Data -- END>> \r\n");
                                           
    #endif
                                        /* parsed index */
                                            //All other HTML elements are nested between the opening <html> and </html> tags.
                                            start_idx = pased_idx((uint8 *)str_start , sizeof(str_start), done_http );
                                            end_idx   = pased_idx((uint8 *)str_end , sizeof(str_end), done_http );			
    
                                            /* printf get <html> ...</html> */							
                                            for(i=start_idx; i<(end_idx+7); i++){						
                                                    /* remove header */
                                                    data_buf[i-start_idx] = data_buf[i];
                                             }   
                                            printf("\r\n");
                                            
    
                                            /* replace <br> tag to \r\n */
                                            //The br tag is used for specifying a line break.
                                            do{
                                                    tmp_idx = pased_idx((uint8*)BR, sizeof(BR) , end_idx-start_idx) ;
                                                    if(tmp_idx == 0 ) 
                                                            break;
                                                 
                                                    memcpy((uint8 *)data_buf+tmp_idx, (uint8*)rBR, sizeof(rBR)) ;
                                            }while(tmp_idx!=end_idx-start_idx);
    
    #define Parsed_DATA
    #ifdef Parsed_DATA
                                            /* parsed DATA */
                                            printf("\r\n<< Parsed Data -- START >>");
                                            printf("\r\nTITLE : \r\n");
                                            /* parse <TITLE> and </TITLE> tags */
                                            tmp_start = pased_idx((uint8 *)TITLE , sizeof(TITLE),(end_idx-start_idx) ) + sizeof(TITLE);
                                            tmp_end   = pased_idx((uint8 *)bTITLE , sizeof(bTITLE),(end_idx-start_idx) );												
                                            for(i=tmp_start; i<tmp_end; i++){
                                                   
                                                    printf("%c",(uint8)data_buf[i]); // printf title
                                            }   
    
                                            printf("\r\n BODY : \r\n");
                                            /*DO NOT PRINT TAG COMMAND: between '<' with '>' */
                                            for(i=tmp_end; i<(end_idx-start_idx); i++){
                                                    //Tag command - ex.)<PRE>
                                                    //'<' is a start point of tag command.
                                                    if((uint8)data_buf[i]=='<'){ 
                                                            no_pr = 0;
                                                    }
                                                    //'>' is a end point of Tag command.
                                                    //To avoid in row tags -> ex.) <PRE><H1>						
                                                    if((uint8)data_buf[i]=='>' && (uint8)data_buf[i+1] !='<' ) {
                                                            no_pr = 1;
                                                            i++;
                                                    }					
                                                    if(no_pr){
                                                        Delay_ms(1);    
                                                        printf("%c",(uint8)data_buf[i]);
                                                    }
                                            }   
                                            printf("\r\n<< Parsed Data -- END >>\r\n");
    #endif
                                            /* Init. parameter */
                                            start_idx= 0;
                                            end_idx= 0;				
                                    done_dns = 0;  
                                    break;
    
                            }
                           //done_http
                            //done_dns=0;
                    }//while : done_dns == 1		
            }
}
예제 #13
0
int
in_reshost(char * host, /* IN - textual IP address or host name */
   ip_addr *   address, /* OUT - address if successful */
   int   flags)         /* IN - RH_VERBOSE, RH_BLOCK */
{
   char *   cp;      /* error holder */
   unsigned snbits;  /* for pass to parse_ipad() */
#ifdef DNS_CLIENT
   int   e;          /* Net error code */
   u_long   tmo;     /* timeout for blocking calls */
   int   blocking =  flags &  RH_BLOCK;
#endif   /* DNS_CLIENT */
   int   verbose  =  flags &  RH_VERBOSE;

   cp = parse_ipad(address, &snbits, host);

   if (!cp) /* worked, string was parsable dot notation */
      return 0;

#ifndef DNS_CLIENT
   if (verbose)
      dprintf("Unable to parse IP host %s.\nerror: %s\n", host, (char*)cp);
   return ENP_PARAM;
#else /* DNS_CLIENT enabled in build */

   if (verbose)
      dprintf("can't parse %s (%s), trying DNS\n", host, cp);

   tmo = cticks + (5 * TPS);  /* set timeout value */

   if (dns_servers[0])  /* dont bother if no servers are set */
   {
      if (verbose)
         dprintf("trying DNS lookup...\n");
      e = dns_query(host, address);
      if (e == ENP_SEND_PENDING)
      {
         if (blocking)
         {
            while (tmo > cticks)
            {
               tk_yield();
               e = dns_query(host, address);
               if (e == 0)
                  goto rh_got_dns;
            }
         }
         if (verbose)
            dprintf("DNS inquiry sent\n");
         return 0;
      }
      else if(e == 0)
      {
         rh_got_dns:
         /* DNS resolution worked */
         if (verbose)
            dprintf("active host found via DNS (%u.%u.%u.%u)\n", 
          PUSH_IPADDR(*address));
         return 0;
      }
      else if(e == ENP_TIMEOUT)  /* timeout? */
      {
         if (verbose)
            dprintf("DNS timeout");
      }
      else
      {
         if (verbose)
            dprintf("DNS error %d", e);
      }
      if (verbose)
         dprintf(", host not set\n");
      return e;
   }

   if (verbose)
      dprintf("DNS/host-parse failed.\n");
   return ENP_PARAM;
#endif   /* DNS_CLIENT */
}
예제 #14
0
파일: net.c 프로젝트: zabbix/zabbix
int	NET_DNS_RECORD(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	return dns_query(request, result, 0);
}
예제 #15
0
파일: net.c 프로젝트: zabbix/zabbix
int	NET_DNS(AGENT_REQUEST *request, AGENT_RESULT *result)
{
	return dns_query(request, result, 1);
}
예제 #16
0
/// Get an IP address from a name. Sets out_ip_addr to 0 on failure
void net_wiznet_gethostbyname(JsNetwork *net, char * hostName, unsigned long* out_ip_addr) {
  NOT_USED(net);
  if (dns_query(0, net_wiznet_getFreeSocket(), (uint8_t*)hostName) == 1) {
    *out_ip_addr = *(unsigned long*)&Server_IP_Addr[0];
  }
}
예제 #17
0
/*******************************************************************************
* Function Name  : Main_Menu
* Description    : Display/Manage a Menu on HyperTerminal Window
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Main_Menu(void)
{
	static char choice[3];
	static char subject[32], msg[256], sender[32], passwd[32], recipient[32], encodedText[256];
	static bool bTreat;
	static u8 Sip[4];
	static char key = 0;
	static wiz_NetInfo netinfo;
	
	
	while (1)
	{
		/* Display Menu on HyperTerminal Window */
		bTreat = (bool)RESET ;
   	        SerialPutString("\r\n====================== STM32-Discovery ===================\r\n");
		SerialPutString("This Application is basic example of UART interface with\r\n");
		SerialPutString("Windows Hyper Terminal. \r\n");
		SerialPutString("\r\n==========================================================\r\n");
		SerialPutString("                          APPLICATION MENU :\r\n");
		SerialPutString("\r\n==========================================================\r\n\n");
		SerialPutString(" 1 - Set LD1 on \r\n");
		SerialPutString(" 2 - Set LD1 off \r\n");
		SerialPutString(" 3 - Show network setting\r\n");
		SerialPutString(" 4 - Set  network setting\r\n");
		SerialPutString(" 5 - Run TCP Loopback\r\n");
		SerialPutString(" 6 - Run UDP Loopback\r\n");
		SerialPutString(" 7 - DNS test\r\n");
		SerialPutString(" 8 - BASE64 test\r\n");
		SerialPutString(" 9 - Send Mail\r\n");
		
		SerialPutString("Enter your choice : ");
		GetInputString(choice);
		/* Set LD1 on */
		if (strcmp(choice,"1")== 0)
		{
			bTreat = (bool)SET;
			LED3_onoff(ON);
			LED4_onoff(ON);
		}
		/* Set LD1 off */
		if ((strcmp(choice,"2") == 0))
		{
			bTreat = (bool)SET;
			LED3_onoff(OFF);
			LED4_onoff(OFF);
		}
		if (strcmp(choice,"3") == 0)
		{
			bTreat = (bool)SET;
			GetNetInfo(&netinfo);
			printf("\r\nIP : %d.%d.%d.%d", netinfo.IP[0],netinfo.IP[1],netinfo.IP[2],netinfo.IP[3]);
			printf("\r\nSN : %d.%d.%d.%d", netinfo.Subnet[0],netinfo.Subnet[1],netinfo.Subnet[2],netinfo.Subnet[3]);
			printf("\r\nGW : %d.%d.%d.%d", netinfo.Gateway[0],netinfo.Gateway[1],netinfo.Gateway[2],netinfo.Gateway[3]);
			printf("\r\nDNS server : %d.%d.%d.%d", netinfo.DNSServerIP[0],netinfo.DNSServerIP[1],netinfo.DNSServerIP[2],netinfo.DNSServerIP[3]);

		}

		if (strcmp(choice,"4") == 0)
		{
			bTreat = (bool)SET;
			// IP address
			SerialPutString("\r\nIP address : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.IP))
			{
				SerialPutString("\aInvalid.");
			}

			// Subnet mask
			SerialPutString("\r\nSubnet mask : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.Subnet))
			{
				SerialPutString("\aInvalid.");
			}
			
			// gateway address
			SerialPutString("\r\nGateway address : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.Gateway))
			{
				SerialPutString("\aInvalid.");
			}

			// DNS address
			SerialPutString("\r\nDNS address : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.DNSServerIP))
			{
				SerialPutString("\aInvalid.");
			}

			printf("\r\nIP : %d.%d.%d.%d", netinfo.IP[0],netinfo.IP[1],netinfo.IP[2],netinfo.IP[3]);
			printf("\r\nSN : %d.%d.%d.%d", netinfo.Subnet[0],netinfo.Subnet[1],netinfo.Subnet[2],netinfo.Subnet[3]);
			printf("\r\nGW : %d.%d.%d.%d", netinfo.Gateway[0],netinfo.Gateway[1],netinfo.Gateway[2],netinfo.Gateway[3]);
			printf("\r\nDNS server : %d.%d.%d.%d", netinfo.DNSServerIP[0],netinfo.DNSServerIP[1],netinfo.DNSServerIP[2],netinfo.DNSServerIP[3]);

			SetNetInfo(&netinfo);
		}
		

		if (strcmp(choice,"5") == 0)
		{
			bTreat = (bool)SET;
		  
			SerialPutString("\r\nRun TCP loopback");
			printf("\r\nRun TCP loopback, port number [%d] is listened", (u16)TCP_LISTEN_PORT);
			SerialPutString("\r\nTo Exit, press [Q]");
			
		  while(1) {

			if ((SerialKeyPressed((char*)&key) == 1) && (key == 'Q')) {
				SerialPutString("\r\n Stop ");
				
				break;
			}

			loopback_tcps(7, (u16)TCP_LISTEN_PORT);
		  }
		  

		}


		if (strcmp(choice,"6") == 0)
		{
			bTreat = (bool)SET;
		  
			SerialPutString("\r\nRun UDP loopback");
			printf("\r\nRun UDP loopback, port number [%d] is listened", (u16)UDP_LISTEN_PORT);
			SerialPutString("\r\nTo Exit, press [Q]");
			
			while(1) {

				if ((SerialKeyPressed((char*)&key) == 1) && (key == 'Q')) {
					SerialPutString("\r\n Stop ");
				
					break;

				}

				loopback_udp(7, (u16)UDP_LISTEN_PORT);
			}

		}


		if (strcmp(choice,"7")== 0)
		{
		  	bTreat = (bool)SET;
			
			SerialPutString("\r\nServer address : ");
			GetInputString(msg);

			SerialPutString("URL = ");
			SerialPutString(msg);
			  	
			if (dns_query(SOCK_DNS, (void *)msg, Sip) == 1) {

				printf("\r\nSIP : %d.%d.%d.%d", (u16)Sip[0],(u16)Sip[1],(u16)Sip[2],(u16)Sip[3]);

			}else {
				SerialPutString("\n\r DNS fail");

			}

			
		}


		if (strcmp(choice,"8")== 0)
		{
			bTreat = (bool)SET;
			
			memset(encodedText, '\0', 256);

			SerialPutString("\r\n");
			SerialPutString(" 1 - BASE64 Encode \r\n");
			SerialPutString(" 2 - BASE64 Decode \r\n");
			SerialPutString("Enter your choice : ");
			GetInputString(choice);

			if (strcmp(choice,"1")== 0) {

				SerialPutString("Type Plain Text\r\n");
				GetInputString(msg);
				base64_encode(msg, strlen(msg)+1, encodedText);
				SerialPutString("Encoded Text\r\n");
				printf("%s\r\n", encodedText);

			}else if(strcmp(choice,"2")== 0){

				SerialPutString("Type Encoded Text\r\n");
				GetInputString(msg);
				base64_decode(msg, (void *)encodedText, strlen(msg));
				SerialPutString("Decoded Text\r\n");
				printf("%s\r\n", encodedText);

			}

		}


		if (strcmp(choice,"9")== 0) {
		  	bTreat = (bool)SET;

			SerialPutString("\r\nServer address : ");
			GetInputString(msg);

			SerialPutString("URL = ");
			SerialPutString(msg);

			// DNS
			if (dns_query(SOCK_DNS, (void *)msg, Sip) == 1) {
				printf("\r\nSIP : %d.%d.%d.%d", (u16)Sip[0],(u16)Sip[1],(u16)Sip[2],(u16)Sip[3]);

				while(1) {

					SerialPutString("\r\nType a Sender: ");
					GetInputString(sender);

					SerialPutString("Type a Password: "******"Type a Recipient: ");
					GetInputString(recipient);

					SerialPutString("Type a Subject: ");
					GetInputString(subject);

					SerialPutString("Type a message: ");
					GetInputString(msg);

					send_mail(SOCK_SMTP, (void *)sender, (void *) passwd, (void *)recipient, (void *)subject, (void *)msg, Sip);

					SerialPutString("\r\nIf you want send another message? [YES]: any key, [NO]: Q");
					key = GetKey();

					if (key == 'Q') {
						SerialPutString("\r\n Stop ");

						break;

					}

				}

			}else {
				SerialPutString("\r\nDNS error");

			}
		}


		/* OTHERS CHOICE*/
		if (bTreat == (bool)RESET)
		{
			SerialPutString(" wrong choice  \r\n");
		}			
	} /* While(1)*/
}/* Main_Menu */
예제 #18
0
int	NET_DNS_RECORD(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
{
	return dns_query(cmd, param, flags, result, 0);
}
예제 #19
0
/*******************************************************************************
* Function Name  : Main_Menu
* Description    : Display/Manage a Menu on HyperTerminal Window
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Main_Menu(void)
{
	static char choice[3];
	static char msg[256];
	static bool bTreat;
	static u8 Sip[4];
	static char key = 0;
	static wiz_NetInfo netinfo;


	while (1)
	{
		/* Display Menu on HyperTerminal Window */
		bTreat = (bool)RESET ;
   	        SerialPutString("\r\n====================== STM32-Discovery ===================\r\n");
		SerialPutString("This Application is basic example of UART interface with\r\n");
		SerialPutString("Windows Hyper Terminal. \r\n");
		SerialPutString("\r\n==========================================================\r\n");
		SerialPutString("                          APPLICATION MENU :\r\n");
		SerialPutString("\r\n==========================================================\r\n\n");
		SerialPutString(" 1 - Set LD1 on \r\n");
		SerialPutString(" 2 - Set LD1 off \r\n");
		SerialPutString(" 3 - Show network setting\r\n");
		SerialPutString(" 4 - Set  network setting\r\n");
		SerialPutString(" 5 - Run TCP Loopback\r\n");
		SerialPutString(" 6 - Run UDP Loopback\r\n");
		SerialPutString(" 7 - DNS test\r\n");
		SerialPutString(" 8 - Twitter\r\n");
		
		SerialPutString("Enter your choice : ");
		GetInputString(choice);
		/* Set LD1 on */
		if (strcmp(choice,"1")== 0)
		{
			bTreat = (bool)SET;
			LED3_onoff(ON);
			LED4_onoff(ON);
		}
		/* Set LD1 off */
		if ((strcmp(choice,"2") == 0))
		{
			bTreat = (bool)SET;
			LED3_onoff(OFF);
			LED4_onoff(OFF);
		}
		if (strcmp(choice,"3") == 0)
		{
			bTreat = (bool)SET;
			GetNetInfo(&netinfo);
			printf("\r\nIP : %d.%d.%d.%d", netinfo.IP[0],netinfo.IP[1],netinfo.IP[2],netinfo.IP[3]);
			printf("\r\nSN : %d.%d.%d.%d", netinfo.Subnet[0],netinfo.Subnet[1],netinfo.Subnet[2],netinfo.Subnet[3]);
			printf("\r\nGW : %d.%d.%d.%d", netinfo.Gateway[0],netinfo.Gateway[1],netinfo.Gateway[2],netinfo.Gateway[3]);
			printf("\r\nDNS server : %d.%d.%d.%d", netinfo.DNSServerIP[0],netinfo.DNSServerIP[1],netinfo.DNSServerIP[2],netinfo.DNSServerIP[3]);

		}

		if (strcmp(choice,"4") == 0)
		{
			bTreat = (bool)SET;
			// IP address
			SerialPutString("\r\nIP address : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.IP))
			{
				SerialPutString("\aInvalid.");
			}

			// Subnet mask
			SerialPutString("\r\nSubnet mask : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.Subnet))
			{
				SerialPutString("\aInvalid.");
			}
			
			// gateway address
			SerialPutString("\r\nGateway address : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.Gateway))
			{
				SerialPutString("\aInvalid.");
			}

			// DNS address
			SerialPutString("\r\nDNS address : ");
			GetInputString(msg);
			if(!VerifyIPAddress(msg, netinfo.DNSServerIP))
			{
				SerialPutString("\aInvalid.");
			}

			printf("\r\nIP : %d.%d.%d.%d", netinfo.IP[0],netinfo.IP[1],netinfo.IP[2],netinfo.IP[3]);
			printf("\r\nSN : %d.%d.%d.%d", netinfo.Subnet[0],netinfo.Subnet[1],netinfo.Subnet[2],netinfo.Subnet[3]);
			printf("\r\nGW : %d.%d.%d.%d", netinfo.Gateway[0],netinfo.Gateway[1],netinfo.Gateway[2],netinfo.Gateway[3]);
			printf("\r\nDNS server : %d.%d.%d.%d", netinfo.DNSServerIP[0],netinfo.DNSServerIP[1],netinfo.DNSServerIP[2],netinfo.DNSServerIP[3]);

			SetNetInfo(&netinfo);
		}
		

		if (strcmp(choice,"5") == 0)
		{
			bTreat = (bool)SET;
		  
			SerialPutString("\r\nRun TCP loopback");
			printf("\r\nRun TCP loopback, port number [%d] is listened", (u16)TCP_LISTEN_PORT);
			SerialPutString("\r\nTo Exit, press [Q]");
			
			while(1) {

				if ((SerialKeyPressed((char*)&key) == 1) && (key == 'Q')) {
					SerialPutString("\r\n Stop ");
				
					break;
				}

				loopback_tcps(7, (u16)TCP_LISTEN_PORT);
			}

		}


		if (strcmp(choice,"6") == 0)
		{
			bTreat = (bool)SET;
		  
			SerialPutString("\r\nRun UDP loopback");
			printf("\r\nRun UDP loopback, port number [%d] is listened", (u16)UDP_LISTEN_PORT);
			SerialPutString("\r\nTo Exit, press [Q]");
			
			while(1) {

				if ((SerialKeyPressed((char*)&key) == 1) && (key == 'Q')) {
					SerialPutString("\r\n Stop ");
				
					break;

				}

				loopback_udp(7, (u16)UDP_LISTEN_PORT);
			}

		}


		if (strcmp(choice,"7")== 0)
		{
			bTreat = (bool)SET;

			SerialPutString("\r\nServer address : ");
			GetInputString(msg);

			SerialPutString("URL = ");
			SerialPutString(msg);
			  	
			if (dns_query(SOCK_DNS, (void *)msg, Sip) == 1) {

				printf("\r\nSIP : %d.%d.%d.%d", (u16)Sip[0],(u16)Sip[1],(u16)Sip[2],(u16)Sip[3]);

			}else {
				SerialPutString("\n\r DNS fail");

			}

		}


		if (strcmp(choice,"8")== 0) {
			bTreat = (bool)SET;

			// DNS
			if (dns_query(SOCK_DNS, LIB_DOMAIN, Sip) == 1) {
				printf("\r\nSIP : %d.%d.%d.%d", (u16)Sip[0],(u16)Sip[1],(u16)Sip[2],(u16)Sip[3]);

				while(1) {
					/*
					sprintf(msg, "Hello, World [%d] from wiz820io", twit_cnt++);

					SerialPutString("\r\nSend Twitter Message: ");
					SerialPutString(msg);
					*/

					SerialPutString("\r\nType a message: ");
					GetInputString(msg);

					Twitter_Post(SOCK_TWITTER, (void *)msg, Sip);

					SerialPutString("\r\nIf you want send another message? [YES]: any key, [NO]: Q");
					key = GetKey();

					if (key == 'Q') {
						SerialPutString("\r\n Stop ");

						break;

					}

				}

			}else {
				SerialPutString("\r\nDNS error");

			}
		}


		if (strcmp(choice,"9") == 0)
		{
                  uint8 l_ip[4] = {222, 98, 173, 237};
			bTreat = (bool)SET;
		  
			SerialPutString("\r\nRun TCP loopback [Client]");
			SerialPutString("\r\nTo Exit, press [Q]");
			
			while(1) {

				if ((SerialKeyPressed((char*)&key) == 1) && (key == 'Q')) {
					SerialPutString("\r\n Stop ");
				
					break;
				}

				TCPClientOpen(7, 5000, l_ip, 5000);
                                Delay_ms(3000);
                                TCPClose(7);
                                Delay_ms(3000);
			}

		}


		/* OTHERS CHOICE*/
		if (bTreat == (bool)RESET)
		{
			SerialPutString(" wrong choice  \r\n");
		}			
	} /* While(1)*/
}/* Main_Menu */