Simplified Wrapper and Interface Generator

SWIG (simplified wrapper and interface generator) is a software development tool that connects programs written in C, C++ and Objective-C with a variety of high-level programming languages. It is often used with common scripting languages such as Perl, Python and Tcl/Tk. In addition, it has been extended to include languages such as Java, Eiffel and Guile.
SWIG is used to create high-level interpreted programming environments for systems integration, and as a tool for building user interfaces and testing. It is distributed as open source and can be downloaded from http://www.swig.org/.
In the following sections, I will discuss some of SWIG's features and my personal experience with it as a testing engineer at Zero Knowledge Systems (http://www.zeroknowledge.com/) for the Freedom Software.
At work, I have to test e-mail, web, IRC, FTP, proxy servers and TELNET clients. My machine is a Pentium powered by a 266MHz processor running Red Hat Linux with 128MB of RAM. My responsibilities include testing the source code currently being developed—hundreds of thousands of lines of code in a mission-critical system, with no room for errors. Given that “the strength of a security system is the strength of its weakest link”, there was no place for flaws. The code cannot be tested manually, because of the distributed architecture of client and servers. Thus, there was an urgent need for an efficient tool that would automate testing procedures. This tool had to be platform-independent and compliant with both C and C++.
Shopping around, I learned about SWIG from its web page. The source can be easily compiled for Linux; it is about 2MB in size. SWIG is multi-platform, i.e., there is no need to duplicate test procedures for Linux and Windows; it supports C and C++; and it can be integrated into MSVC++ (Microsoft Visual C++). SWIG proved to be the perfect tool.
SWIG accepts as input an ANSI C-like interface file that describes the functions and objects constituting the program to be tested. The interface file can also include SWIG directives and documentation. SWIG wraps the functions in another C program. When both of these programs (the source code and the wrapped source code) get compiled, SWIG creates a library file that can be called from the Tcl shell.
The Program: start by writing your C program to be tested. One thing to note is you have to modify the name of the “main” function. Listing 1 is an example of a C program.
Interface file: in order to allow SWIG control over this program, we have to write an “interface file”. An interface file for our C functions might look like the one in Listing 2.
Build a Tcl module: at the prompt, type the following:
swig -tcl8 my_interface.iThis command will create a Tcl 8.0-compliant library.
Compile wrappers for Tcl using the commands
gcc -fpic -c example.c example_wrap.c\
-I/usr/local/include
gcc -shared example.o example_wrap.o\
-o example.so
Call the Tcl shell by typing tclsh.
Load the example.so library with the command
load ./example.so example
get_time Sun Feb 11 23:01:07 1996
SWIG helped me a lot, due to the flexibility of function calling it provides. The company had a secure mail system to be tested. In this system, all e-mail messages go through several servers before they reach their final destination, and they are encrypted each time they pass through a new routing server.
My approach toward testing this environment was to write an e-mail generator program in C which I called GenerateMail. GenerateMail accepts several options such as the number of To, CC and Bcc copies, the number of file attachments, etc. It produces a file ready to be piped to Sendmail.
A typical GenerateMail run would be something like:
tclsh generate_mail -Attachments 3 -CC 2\ -output file msg.txt tclsh send_mail msg.txt
The first line creates an e-mail message file. The message has three target addresses and two carbon copies. Three binary files were attached as MIME attachments. By default, GenerateMail uses bitmaps that are in its current directory.
The second line calls Sendmail with the appropriate options to accept that mail message and send it on to the wire. Doing that, it was easy to generate a large number of mail messages. In addition, comparing the source and destination message checksums was very easy with the help of SWIG.
Today’s modular x86 servers are compute-centric, designed as a least common denominator to support a wide range of IT workloads. Those generic, virtualized IT workloads have much different resource optimization requirements than hyperscale and cloud applications. They have resulted in a “one size fits all” enterprise IT architecture that is not optimized for a specific set of IT workloads, and especially not emerging hyperscale workloads, such as web applications, big data, and object storage. In this report, you will learn how shifting the focus from traditional compute-centric IT architectures to an innovative disaggregated fabric-based architecture can optimize and scale your data center.
Sponsored by AMD
Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6
Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.
Learn more about catching the bad guy in this free white paper.
Sponsored by DLT Solutions
| Making Linux and Android Get Along (It's Not as Hard as It Sounds) | May 16, 2013 |
| Drupal Is a Framework: Why Everyone Needs to Understand This | May 15, 2013 |
| Home, My Backup Data Center | May 13, 2013 |
| Non-Linux FOSS: Seashore | May 10, 2013 |
| Trying to Tame the Tablet | May 08, 2013 |
| Dart: a New Web Programming Experience | May 07, 2013 |
- RSS Feeds
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- New Products
- Drupal Is a Framework: Why Everyone Needs to Understand This
- A Topic for Discussion - Open Source Feature-Richness?
- Home, My Backup Data Center
- Validate an E-Mail Address with PHP, the Right Way
- New Products
- Tech Tip: Really Simple HTTP Server with Python
- Trying to Tame the Tablet
Enter to Win an Adafruit Prototyping Pi Plate Kit for Raspberry Pi

It's Raspberry Pi month at Linux Journal. Each week in May, Adafruit will be giving away a Pi-related prize to a lucky, randomly drawn LJ reader. Winners will be announced weekly.
Fill out the fields below to enter to win this week's prize-- a Prototyping Pi Plate Kit for Raspberry Pi.
Congratulations to our winners so far:
- 5-8-13, Pi Starter Pack: Jack Davis
- 5-15-13, Pi Model B 512MB RAM: Patrick Dunn
- Next winner announced on 5-21-13!
Free Webinar: Linux Backup and Recovery
Most companies incorporate backup procedures for critical data, which can be restored quickly if a loss occurs. However, fewer companies are prepared for catastrophic system failures, in which they lose all data, the entire operating system, applications, settings, patches and more, reducing their system(s) to “bare metal.” After all, before data can be restored to a system, there must be a system to restore it to.
In this one hour webinar, learn how to enhance your existing backup strategies for better disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible bare-metal recovery solution for UNIX and Linux systems.




2 hours 53 min ago
3 hours 16 min ago
3 hours 26 min ago
3 hours 30 min ago
4 hours 43 sec ago
6 hours 52 min ago
7 hours 27 min ago
7 hours 28 min ago
7 hours 29 min ago
7 hours 30 min ago