예제 #1
0
static int
get_display_name(struct mail *mail, const char *header, const char **name_r)
{
	struct message_address *addr;

	*name_r = "";

	if (get_first_addr(mail, header, &addr) < 0)
		return -1;
	if (addr == NULL)
		return 0;

	if (addr->name != NULL) {
		string_t *str;
		unsigned int len = strlen(addr->name);

		str = t_str_new(len*2);
		(void)message_header_decode_utf8(
			(const unsigned char *)addr->name, len, str, NULL);
		if (str_len(str) > 0) {
			*name_r = str_c(str);
			return 0;
		}
	}
	if (addr->mailbox != NULL && addr->domain != NULL)
		*name_r = t_strconcat(addr->mailbox, "@", addr->domain, NULL);
	else if (addr->mailbox != NULL)
		*name_r = addr->mailbox;
	return 0;
}
예제 #2
0
static int
get_first_mailbox(struct mail *mail, const char *header, const char **mailbox_r)
{
	struct message_address *addr;

	if (get_first_addr(mail, header, &addr) < 0) {
		*mailbox_r = "";
		return -1;
	}
	*mailbox_r = addr != NULL && addr->mailbox != NULL ? addr->mailbox : "";
	return 0;
}
예제 #3
0
LS_API bool
ls_sockaddr_parse(const char*      src,
                  struct sockaddr* addr,
                  size_t           addr_len,
                  ls_err*          err)
{
  struct addrinfo hints;
  memset(&hints, 0, sizeof hints);
  hints.ai_flags    = AI_NUMERICHOST;
  hints.ai_protocol = IPPROTO_UDP;
  hints.ai_socktype = SOCK_DGRAM;

  return get_first_addr(src, NULL, &hints, addr, addr_len, err);
}
예제 #4
0
LS_API bool
ls_sockaddr_get_remote_ip_addr(const char*      fqdn,
                               const char*      port,
                               struct sockaddr* remoteAddr,
                               size_t           addr_len,
                               ls_err*          err)
{
  struct addrinfo hints;

  memset(&hints, 0, sizeof hints);
  hints.ai_protocol = IPPROTO_UDP;
  hints.ai_socktype = SOCK_DGRAM;

  return get_first_addr(fqdn, port, &hints, remoteAddr, addr_len, err);
}