summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-03-29 00:06:14 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-03-29 00:06:14 +0000
commit9659f582f869563ac0c473674b76336f041c22fb (patch)
tree1751abe11bd5ff73288d746c6b2ca46647e443f4
parentdae9c2321c03dabb3817cc5216be27b9ec5aaf8e (diff)
downloadnuttx-9659f582f869563ac0c473674b76336f041c22fb.tar.gz
nuttx-9659f582f869563ac0c473674b76336f041c22fb.tar.bz2
nuttx-9659f582f869563ac0c473674b76336f041c22fb.zip
Add logic to build sendmail example on target
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1664 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/TODO17
-rw-r--r--nuttx/examples/README.txt21
-rw-r--r--nuttx/examples/sendmail/Makefile76
-rw-r--r--nuttx/examples/sendmail/target.c168
4 files changed, 271 insertions, 11 deletions
diff --git a/nuttx/TODO b/nuttx/TODO
index 32aee97ec..5386bc577 100644
--- a/nuttx/TODO
+++ b/nuttx/TODO
@@ -16,7 +16,7 @@ NuttX TODO List (Last updated March 28, 2009)
(2) Documentation (Documentation/)
(5) Build system / Toolchains
(2) NuttShell (NSH) (examples/nsh)
- (2) Other Applications & Tests (examples/)
+ (3) Other Applications & Tests (examples/)
(1) Linux/Cywgin simulation (arch/sim)
(2) ARM (arch/arm/)
(1) ARM/C5471 (arch/arm/src/c5471/)
@@ -119,11 +119,10 @@ o C++ Support
o Network (net/, netutils/)
^^^^^^^^^^^^^^^^^^^^^^^^^
- Description: Several of the netutils/ apps are untested. These include
- uIP's netutils/smtp and resolv. The webclient code has been
- tested on host using gethosbyname(), but not depends on the
- untested resolve logic. Only minimal testing of the others
- has been performed.
+ Description: One critical part of netutils/ apps is untested: The uIP
+ resolver in netutils/resolv. The webclient code has been
+ tested on host using gethosbyname(), but still depends on the
+ untested resolve logic.
Status: Open
Priority: Medium, Important but not core NuttX functionality
@@ -405,6 +404,12 @@ o Other Applications & Tests (examples/)
Status: Open
Priority: Med
+ Description: examples/sendmail is untested on the target (it has been tested
+ on the host, but not on the target.
+ Status: Open
+ Priority: Med
+
+
o Linux/Cywgin simulation (arch/sim)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/nuttx/examples/README.txt b/nuttx/examples/README.txt
index 0ae8d9d34..faa378bb2 100644
--- a/nuttx/examples/README.txt
+++ b/nuttx/examples/README.txt
@@ -234,15 +234,26 @@ examples/sendmail
^^^^^^^^^^^^^^^^^
This examples exercises the uIP SMTP logic by sending a test message
- to a selected recipient.
-
- NOTE 1: This test is not integrated into NuttX as of this writing,
- it can only be built to execute of the Cygwin/Linux host for unit-
- testing of the logic.
+ to a selected recipient. This test can also be built to execute on
+ the Cygwin/Linux host environment:
cd examples/sendmail
make -f Makefile.host
+ Settings unique to this example include:
+
+ CONFIG_EXAMPLE_SENDMAIL_NOMAC - May be defined to use software assigned MAC (optional)
+ CONFIG_EXAMPLE_SENDMAIL_IPADDR - Target IP address (required)
+ CONFIG_EXAMPLE_SENDMAIL_DRIPADDR - Default router IP addess (required)
+ CONFIG_EXAMPLE_SENDMAILT_NETMASK - Network mask (required)
+ CONFIG_EXAMPLE_SENDMAIL_RECIPIENT - The recipient of the email (required)
+ CONFIG_EXAMPLE_SENDMAIL_SENDER - Optional. Default: "nuttx-testing@example.com"
+ CONFIG_EXAMPLE_SENDMAIL_SUBJECT - Optional. Default: "Testing SMTP from NuttX"
+ CONFIG_EXAMPLE_SENDMAIL_BODY - Optional. Default: "Test message sent by NuttX"
+
+ NOTE: This test has not been verified on the NuttX target environment.
+ As of this writing, unit-tested in the Cygwin/Linux host environment.
+
NOTE 2: This sendmail example only works for the simplest of
environments. Virus protection software on your host may have
to be disabled to allow you to send messages. Only very open,
diff --git a/nuttx/examples/sendmail/Makefile b/nuttx/examples/sendmail/Makefile
new file mode 100644
index 000000000..0907345d4
--- /dev/null
+++ b/nuttx/examples/sendmail/Makefile
@@ -0,0 +1,76 @@
+############################################################################
+# examples/sendmail/Makefile
+#
+# Copyright (C) 2009 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+
+ASRCS =
+AOBJS = $(ASRCS:.S=$(OBJEXT))
+CSRCS = target.c
+COBJS = $(CSRCS:.c=$(OBJEXT))
+
+SRCS = $(ASRCS) $(CSRCS)
+OBJS = $(AOBJS) $(COBJS)
+
+BIN = lib$(CONFIG_EXAMPLE)$(LIBEXT)
+
+all: $(BIN)
+
+$(AOBJS): %$(OBJEXT): %.S
+ $(call ASSEMBLE, $<, $@)
+
+$(COBJS): %$(OBJEXT): %.c
+ $(call COMPILE, $<, $@)
+
+$(BIN): $(OBJS)
+ @( for obj in $(OBJS) ; do \
+ $(call ARCHIVE, $@, $${obj}); \
+ done ; )
+
+.depend: Makefile $(SRCS)
+ @$(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
+ @touch $@
+
+depend: .depend
+
+clean:
+ @rm -f $(BIN) *~ .*.swp
+ $(call CLEAN)
+ @make -f Makefile.host clean
+
+distclean: clean
+ @rm -f Make.dep .depend
+
+-include Make.dep
diff --git a/nuttx/examples/sendmail/target.c b/nuttx/examples/sendmail/target.c
new file mode 100644
index 000000000..1d96fd53b
--- /dev/null
+++ b/nuttx/examples/sendmail/target.c
@@ -0,0 +1,168 @@
+/****************************************************************************
+ * examples/sendmail/target.c
+ *
+ * Copyright (C) 2009 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name Gregory Nutt nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <net/if.h>
+#include <net/uip/uip-lib.h>
+#include <net/uip/smtp.h>
+
+/****************************************************************************
+ * Pre-processor Defintitions
+ ****************************************************************************/
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_RECIPIENT
+# error "You must provice CONFIG_EXAMPLE_SENDMAIL_RECIPIENT"
+#endif
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_IPADDR
+# error "You must provice CONFIG_EXAMPLE_SENDMAIL_IPADDR"
+#endif
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_DRIPADDR
+# error "You must provice CONFIG_EXAMPLE_SENDMAIL_DRIPADDR"
+#endif
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_NETMASK
+# error "You must provice CONFIG_EXAMPLE_SENDMAIL_NETMASK"
+#endif
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_SENDER
+# define CONFIG_EXAMPLE_SENDMAIL_SENDER "nuttx-testing@example.com"
+#endif
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_SUBJECT
+# define CONFIG_EXAMPLE_SENDMAIL_SUBJECT "Testing SMTP from NuttX"
+#endif
+
+#ifndef CONFIG_EXAMPLE_SENDMAIL_BODY
+# define CONFIG_EXAMPLE_SENDMAIL_BODY "Test message sent by NuttX"
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const char g_host_name[] = "localhost";
+static const char g_recipient[] = CONFIG_EXAMPLE_SENDMAIL_RECIPIENT;
+static const char g_sender[] = CONFIG_EXAMPLE_SENDMAIL_SENDER;
+static const char g_subject[] = CONFIG_EXAMPLE_SENDMAIL_SUBJECT;
+static const char g_msg_body[] = CONFIG_EXAMPLE_SENDMAIL_BODY "\r\n";
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+/****************************************************************************
+ * user_initialize
+ ****************************************************************************/
+
+#ifndef CONFIG_HAVE_WEAKFUNCTIONS
+void user_initialize(void)
+{
+ /* Stub that must be provided only if the toolchain does not support weak
+ * functions.
+ */
+}
+#endif
+
+/****************************************************************************
+ * user_start
+ ****************************************************************************/
+
+int user_start(int argc, char *argv[])
+{
+ struct in_addr addr;
+#if defined(CONFIG_EXAMPLE_SENDMAIL_NOMAC)
+ uint8 mac[IFHWADDRLEN];
+#endif
+ void *handle;
+
+ printf("sendmail: To: %s\n", g_recipient);
+ printf("sendmail: From: %s\n", g_sender);
+ printf("sendmail: Subject: %s\n", g_subject);
+ printf("sendmail: Body: %s\n", g_msg_body);
+
+/* Many embedded network interfaces must have a software assigned MAC */
+
+#ifdef CONFIG_EXAMPLE_SENDMAIL_NOMAC
+ mac[0] = 0x00;
+ mac[1] = 0xe0;
+ mac[2] = 0xb0;
+ mac[3] = 0x0b;
+ mac[4] = 0xba;
+ mac[5] = 0xbe;
+ uip_setmacaddr("eth0", mac);
+#endif
+
+ /* Set up our host address */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLE_SENDMAIL_IPADDR);
+ uip_sethostaddr("eth0", &addr);
+
+ /* Set up the default router address */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLE_SENDMAIL_DRIPADDR);
+ uip_setdraddr("eth0", &addr);
+
+ /* Setup the subnet mask */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLE_SENDMAIL_NETMASK);
+ uip_setnetmask("eth0", &addr);
+
+ /* Then send the mail */
+
+ uip_ipaddr(addr.s_addr, 127, 0, 0, 1);
+ handle = smtp_open();
+ if (handle)
+ {
+ smtp_configure(handle, g_host_name, &addr.s_addr);
+ smtp_send(handle, g_recipient, NULL, g_sender, g_subject,
+ g_msg_body, strlen(g_msg_body));
+ smtp_close(handle);
+ }
+ return 0;
+}