aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2004-12-18 01:57:39 +0000
committerVincent Richard <[email protected]>2004-12-18 01:57:39 +0000
commit460cae786af2c4c8ff205f7feb45b50c43a6700b (patch)
treeadc4c2f466ae5dd625f57a13df3247dd565fbb3a /examples
parentAdded appendComponent() and getComponentAt() functions. (diff)
downloadvmime-460cae786af2c4c8ff205f7feb45b50c43a6700b.tar.gz
vmime-460cae786af2c4c8ff205f7feb45b50c43a6700b.zip
Default platform handlers (currently only POSIX).
Diffstat (limited to 'examples')
-rw-r--r--examples/README4
-rw-r--r--examples/common.inc312
-rw-r--r--examples/example1.cpp4
-rw-r--r--examples/example2.cpp4
-rw-r--r--examples/example3.cpp4
-rw-r--r--examples/example4.cpp4
-rw-r--r--examples/example5.cpp4
-rw-r--r--examples/example6.cpp4
8 files changed, 14 insertions, 326 deletions
diff --git a/examples/README b/examples/README
index b8e11937..f741c387 100644
--- a/examples/README
+++ b/examples/README
@@ -2,8 +2,8 @@
1) Configure, compile and install vmime library
2) Compile the sample programs with:
- $ g++ -o exampleX exampleX.cpp ../libvmime.a
+ $ g++ -o exampleX exampleX.cpp ../libvmime.a ../libvmime-posix.a
3) For a more complete documentation, please visit:
- http://www.kisli.com/vmime/doc/
+ http://vmime.sourceforge.net/documentation/
diff --git a/examples/common.inc b/examples/common.inc
deleted file mode 100644
index 8da13f2c..00000000
--- a/examples/common.inc
+++ /dev/null
@@ -1,312 +0,0 @@
-//
-// VMime library (http://vmime.sourceforge.net)
-// Copyright (C) 2002-2004 Vincent Richard <[email protected]>
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License as
-// published by the Free Software Foundation; either version 2 of
-// the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-//
-
-#include <ctime>
-
-#include <unistd.h>
-#include <locale.h>
-#include <langinfo.h>
-
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <fcntl.h>
-
-#include <pthread.h>
-
-#include <sched.h>
-
-#include "../src/vmime"
-
-
-class my_socket : public vmime::messaging::socket
-{
-private:
-
- char m_buffer[65536];
- int m_desc;
-
-public:
-
- my_socket()
- : m_desc(0)
- {
- if ((m_desc = ::socket(AF_INET, SOCK_STREAM, 0)) == -1)
- {
- // Error
- }
-
- //::fcntl(m_desc, F_SETFL, ::fcntl(m_desc, F_GETFL, 0) | O_NONBLOCK);
- }
-
- ~my_socket()
- {
- ::close(m_desc);
- }
-
- void connect(const vmime::string& address, const vmime::port_t port)
- {
- ::sockaddr_in addr;
-
- memset(&addr, 0, sizeof(addr));
-
- addr.sin_family = AF_INET;
- addr.sin_port = htons((unsigned short) port);
- addr.sin_addr.s_addr = ::inet_addr(address.c_str());
-
- std::cout << "Connecting to '" << address << "' port " << port << "..." << std::endl;
-
- if (addr.sin_addr.s_addr == (::in_addr_t) -1)
- {
- ::hostent* hostInfo = (hostent*) ::gethostbyname(address.c_str());
-
- if (hostInfo == NULL)
- {
- // Error: cannot resolve address
- throw vmime::exceptions::connection_error();
- }
-
- bcopy(hostInfo->h_addr, (char*) &addr.sin_addr, hostInfo->h_length);
-
- std::cout << "Address resolved to " << inet_ntoa(addr.sin_addr) << std::endl;
- }
- else
- {
- // Error: cannot resolve address
- throw vmime::exceptions::connection_error();
- }
-
- std::cout << std::endl;
-
- if (::connect(m_desc, (sockaddr*) &addr, sizeof(addr)) == -1)
- {
- // Error
- throw vmime::exceptions::connection_error();
- }
- }
-
- const bool isConnected() const
- {
- return (m_desc != 0);
- }
-
- void disconnect()
- {
- ::shutdown(m_desc, SHUT_RDWR);
- }
-
- void receive(vmime::string& buffer)
- {
- ::ssize_t ret = ::recv(m_desc, m_buffer, sizeof(m_buffer), 0);
-
- if (ret == -1)
- {
- // Error or no data
- return;
- }
- else if (ret > 0)
- {
- buffer = vmime::string(m_buffer, ret);
-
-#if DEBUG_SOCKET_IO
- std::cout << "S: " << buffer;
- std::cout.flush();
-#endif
- }
- }
-
- const int receiveRaw(char* buffer, const int count)
- {
- ::ssize_t ret = ::recv(m_desc, buffer, count, 0);
-
- if (ret == -1)
- {
- // Error or no data
- return (0);
- }
- else
- {
-#if DEBUG_SOCKET_IO
- std::cout << "S: " << vmime::string(buffer, count);
- std::cout.flush();
-#endif
-
- return (ret);
- }
- }
-
- void send(const vmime::string& buffer)
- {
-#if DEBUG_SOCKET_IO
- std::cout << "C: " << buffer;
- std::cout.flush();
-#endif
-
- ::send(m_desc, buffer.data(), buffer.length(), 0);
- }
-
- void sendRaw(const char* buffer, const int count)
- {
-#if DEBUG_SOCKET_IO
- std::cout << "C: " << vmime::string(buffer, count);
- std::cout.flush();
-#endif
-
- ::send(m_desc, buffer, count, 0);
- }
-};
-
-
-class my_socket_factory : public vmime::messaging::socketFactory
-{
-public:
-
- vmime::messaging::socket* create()
- {
- return (new my_socket);
- }
-};
-
-
-
-/*
-
-TODO: file, fileSystemFactory
-
-
-
-#include <errno.h>
-
-
-
-Erreurs pour fileIterator [ opendir() ] :
-===> switch + exception appropriƩe (exceptions::fileIteratorException ?)
-
-* EACESS Permission denied.
-
-* EMFILE Too many file descriptors in use by process.
-
-* ENFILE Too many files are currently open in the system.
-
-* ENOENT Directory does not exist, or name is an empty string.
-
-* ENOMEM Insufficient memory to complete the operation.
-
-* ENOTDIR Name is not a directory.
-
-*/
-
-
-
-class my_handler : public vmime::platformDependant::handler
-{
-private:
-
- my_socket_factory* m_sf;
-
-public:
-
- my_handler()
- : m_sf(new my_socket_factory)
- {
- }
-
- ~my_handler()
- {
- delete (m_sf);
- }
-
- const unsigned int getUnixTime() const
- {
- return ::std::time(NULL);
- }
-
- // WARNING: this is not thread-safe!
- const vmime::datetime getCurrentLocalTime() const
- {
- const ::std::time_t t(::std::time(NULL));
-
- // Get the local time
- ::std::tm local = *::std::localtime(&t);
-
- // Get the UTC time
- ::std::tm gmt = *::std::gmtime(&t);
-
- // "A negative value for tm_isdst causes mktime() to attempt
- // to determine whether Daylight Saving Time is in effect
- // for the specified time."
- local.tm_isdst = -1;
- gmt.tm_isdst = -1;
-
- // Calculate the difference (in seconds)
- const int diff = ::std::mktime(&local) - ::std::mktime(&gmt);
-
- // Return the date
- return vmime::datetime(local.tm_year + 1900, local.tm_mon + 1, local.tm_mday,
- local.tm_hour, local.tm_min, local.tm_sec, diff / 60); // minutes needed
- }
-
- const vmime::charset getLocaleCharset() const
- {
- vmime::string prevLocale(::setlocale(::LC_ALL, ""));
- vmime::charset ch(::nl_langinfo(::CODESET));
- ::setlocale(::LC_ALL, prevLocale.c_str());
-
- return (ch);
- }
-
- const vmime::string getHostName() const
- {
- // TODO: you should return the real (unique) host name
- return "localhost";
- }
-
- const unsigned int getProcessId() const
- {
- return getpid();
- }
-
- vmime::messaging::socketFactory* getSocketFactory(const vmime::string& /* name */) const
- {
- return m_sf;
- }
-
- vmime::messaging::timeoutHandlerFactory* getTimeoutHandlerFactory(const vmime::string& /* name */) const
- {
- // Not used for now
- return NULL;
- }
-
- vmime::utility::fileSystemFactory* getFileSystemFactory() const
- {
- // TODO
- return NULL;
- }
-
- void wait() const
- {
- //::sched_yield();
- std::cout << "WAIT" << std::endl;
- sleep(1);
- }
-};
-
-
diff --git a/examples/example1.cpp b/examples/example1.cpp
index b639a4bc..24a50b2b 100644
--- a/examples/example1.cpp
+++ b/examples/example1.cpp
@@ -30,7 +30,7 @@
#include <iostream>
#include "../src/vmime"
-#include "common.inc"
+#include "../src/platforms/posix/handler.hpp"
int main()
@@ -38,7 +38,7 @@ int main()
std::cout << std::endl;
// VMime initialization
- vmime::platformDependant::setHandler<my_handler>();
+ vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
try
{
diff --git a/examples/example2.cpp b/examples/example2.cpp
index 6e7f81c6..6534d7e8 100644
--- a/examples/example2.cpp
+++ b/examples/example2.cpp
@@ -30,7 +30,7 @@
#include <iostream>
#include "../src/vmime"
-#include "common.inc"
+#include "../src/platforms/posix/handler.hpp"
int main()
@@ -38,7 +38,7 @@ int main()
std::cout << std::endl;
// VMime initialization
- vmime::platformDependant::setHandler<my_handler>();
+ vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
try
{
diff --git a/examples/example3.cpp b/examples/example3.cpp
index d2b41754..839c1ad7 100644
--- a/examples/example3.cpp
+++ b/examples/example3.cpp
@@ -30,7 +30,7 @@
#include <iostream>
#include "../src/vmime"
-#include "common.inc"
+#include "../src/platforms/posix/handler.hpp"
int main()
@@ -38,7 +38,7 @@ int main()
std::cout << std::endl;
// VMime initialization
- vmime::platformDependant::setHandler<my_handler>();
+ vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
try
{
diff --git a/examples/example4.cpp b/examples/example4.cpp
index 605452fe..9cb774e7 100644
--- a/examples/example4.cpp
+++ b/examples/example4.cpp
@@ -29,7 +29,7 @@
#include <iostream>
#include "../src/vmime"
-#include "common.inc"
+#include "../src/platforms/posix/handler.hpp"
int main()
@@ -37,7 +37,7 @@ int main()
std::cout << std::endl;
// VMime initialization
- vmime::platformDependant::setHandler<my_handler>();
+ vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
try
{
diff --git a/examples/example5.cpp b/examples/example5.cpp
index e5a7c93b..7885bd88 100644
--- a/examples/example5.cpp
+++ b/examples/example5.cpp
@@ -30,7 +30,7 @@
#include <iostream>
#include "../src/vmime"
-#include "common.inc"
+#include "../src/platforms/posix/handler.hpp"
int main()
@@ -38,7 +38,7 @@ int main()
std::cout << std::endl;
// VMime initialization
- vmime::platformDependant::setHandler<my_handler>();
+ vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
try
{
diff --git a/examples/example6.cpp b/examples/example6.cpp
index 78fe0f3d..465cf854 100644
--- a/examples/example6.cpp
+++ b/examples/example6.cpp
@@ -20,7 +20,7 @@
#include <iostream>
#include "../src/vmime"
-#include "common.inc"
+#include "../src/platforms/posix/handler.hpp"
//
@@ -70,7 +70,7 @@ void printStructure(const vmime::messaging::structure& s, int level = 0)
int main()
{
// VMime initialization
- vmime::platformDependant::setHandler <my_handler>();
+ vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
//
// Test the new enumeration system for encoders