XI Content Description

Hi,
In general i get into SAP Service Market , under download and i find XI Standard content for many SAP Applications.
XI content is vast and it has given for many appl , how to find the dexcription and usuage of the content.
Do we need to download and import into XI IR and check the Integration Scenarios ??
Please lemme know where i can find the functionalities of each content
rgds
srini

Hi
For an overview of the XI content currently provided by SAP, see the SAP Developer Network (SDN) under https://www.sdn.sap.com/irj/sdn.  In the navigation area, choose SOA Middleware ® Repository-Based Modeling and Design. On the Repository-Based Modeling and Design page, choose SOA Business Content.
Regards
Uday

Similar Messages

  • How to remove all standard SOAP content  like Content-ID:, Content-Description

    Hi ,
    can you please let  me know how to remove standard SOAP content from messages
    I am  posting  below text file via SOAP adapter:
    POST /hapld/tos/kdwhapltos HTTP/1.1
    Host: www.pld.ups.com
    Content-type: multipart/mixed; boundary=BOUNDARY
    Content-length: 719
    --Boundary
    CA12345       *qweru* wefgh*
    --Boundary--
    But   below content automatically  added into a  messages even I am using don’t  use SOAP envelop ,I don't want to keep all below information in my messages content  
    Content-ID:<[email protected]>
    Content-Type:text/xml; charset=utf-8
    Content-Disposition:attachment;filename="[email protected]"
    Content-Description:SOAP
    <SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'><SOAP:Header><sap:Main xmlns:sap='http://sap.com/xi/XI/Message/30'
    versionMajor='3' versionMinor='1' SOAP:mustUnderstand='1'>
    <sap:MessageClass>ApplicationMessage</sap:MessageClass><sap:ProcessingMode>synchronous</sap:ProcessingMode>
    <sap:MessageId>72232e3c-9d7a-11e3-a92f-00000086498a</sap:MessageId><sap:TimeSent>2014-02-24T17:38:17Z</sap:TimeSent>
    <sap:Sender><sap:Party agency='http://sap.com/xi/XI' scheme='XIParty'></sap:Party><sap:Service>DE2CLNT200</sap:Service></sap:Sender>
    <sap:Receiver><sap:Party agency='http://sap.com/xi/XI' scheme='XIParty'>UPS</sap:Party><sap:Service>PLD</sap:Service></sap:Receiver><sap:Interface namespace='urn:mt.com:A:FWD:Transportation'>UPSPLD_In_A</sap:Interface></sap:Main><sap:ReliableMessaging xmlns:sap='http://sap.com/xi/XI/Message/30' SOAP:mustUnderstand='1'><sap:QualityOfService>ExactlyOnce</sap:QualityOfService></sap:ReliableMessaging><sap:System xmlns:sap='http://sap.com/xi/XI/Message/30' SOAP:mustUnderstand='1'><sap:Record namespace='http://sap.com/xi/XI/Message/30/general' name='interfaceDeterminationGUID'>69e207999d7a11e3c20e00000086498b</sap:Record><sap:Record namespace='http://sap.com/xi/XI/Message/30/general' name='syncTimeout'>1200000</sap:Record><sap:Record namespace='http://sap.com/xi/XI/Message/30/general' name='senderAgreementGUID'>204a48791a5c30188698c82c7a5ac51f</sap:Record></sap:System><sap:DynamicConfiguration xmlns:sap='http://sap.com/xi/XI/Message/30' SOAP:mustUnderstand='1'><sap:Record namespace='http://sap.com/xi/XI/Message/30/routing' name='InterfaceDeterminationHash'>76ffb8570fb621f090b46490ec701f6a</sap:Record><sap:Record namespace='http://sap.com/xi/XI/Message/30/general' name='senderAgreementGUID'>204a48791a5c30188698c82c7a5ac51f</sap:Record></sap:DynamicConfiguration><sap:HopList xmlns:sap='http://sap.com/xi/XI/Message/30' SOAP:mustUnderstand='1'><sap:Hop timeStamp='2014-02-24T17:38:17Z' wasRead='false'><sap:Engine type='AE'>af.di3.ch00vdi3s</sap:Engine><sap:Adapter namespace='http://sap.com/xi/XI/System'>XIRA</sap:Adapter><sap:MessageId>72232e3c-9d7a-11e3-a92f-00000086498a</sap:MessageId></sap:Hop><sap:Hop timeStamp='2014-02-24T17:38:18Z' wasRead='false'><sap:Engine type='AE'>af.di3.ch00vdi3s</sap:Engine><sap:Adapter namespace='http://sap.com/xi/XI/System'>XIRA</sap:Adapter><sap:MessageId>729468d1-9d7a-11e3-8cb7-00000086498a</sap:MessageId></sap:Hop></sap:HopList></SOAP:Header><SOAP:Body><sap:Manifest xmlns:sap='http://sap.com/xi/XI/Message/30' xmlns:xlink='http://www.w3.org/1999/xlink'><sap:Payload xlink:type='simple' xlink:href='cid:[email protected]'><sap:Name>MainDocument</sap:Name><sap:Type>Application</sap:Type></sap:Payload></sap:Manifest></SOAP:Body></SOAP:Envelope>Content-ID:<[email protected]>
    Content-Disposition:attachment;filename="MainDocument.txt"
    Content-Type:multipart/mixed; boundary=BOUNDARY
    Content-Description:MainDocument

    Hello Amit
    I have tried that option but  main problem is that I don’t want  below content that generated By XI after SOAP Envelope,  is it any way to remove below content
    Content-ID:<[email protected]>
    Content-Disposition:attachment;filename="MainDocument.xml"
    Content-Type:application/xml
    Content-Description:MainDocument
    Regards,
    Amit

  • ORACLE_HOME Directory Structure and Content description

    Can anyone show me the Oracle document or website which lists the
    ORACLE_HOME Directory Structure and Content description for windows platform.
    Oracle 10g R2.
    Thank you,
    Smith

    http://download.oracle.com/docs/cd/B19306_01/install.102/b14316/ofa.htm#CBBEDHEB

  • Video content description limited to one line only. Three lines needed

    The videos app on my iPad mini (iOS 6.0.2) presents videos/films by nice thumbnails; however, with only one line of video file info. As there is a lot of footprint available, it would be great with, say, three lines of info like location, artists, song titles. I enter that type of info in iTunes, but it's not possible to retrieve it with the videos app.

    Hi
    From text tools I select "Lower Third" (second first row) and it gives me two
    lines.
    By using a smaller font and NO Serif (as in Times) but eg Ariel (SanSerif) one
    can squees in rather much text. Then adjusting the length of this to suit "say"
    (spoken words). To cont. by next two lines one might need to do this by adding
    more text to to next video-clip then move it back to where first one ends.
    Rather tricky to do - alt. is to make a cut in the video-clip for next text lines to orient
    too. May be an easier way to go. This cut will not be visibly only work as guide to
    the text tool.
    Third line - I didn't make this.
    If You only get one - then trashing iMovie pref file might help it to get back on track.
    Yours Bengt W

  • B2B-51566 Description: Parse stream error with RosettaNet 1.1

    Hi
    Need help with the following error message
    B2B-51566 Parse stream error
    We have a trading partner set up to use RosettaNet 1.1 protocol and we are getting 51566 error. We are NOT experiencing this error with a trading partner who is in RosettaNet 2.0
    we are currently patched up to 11.1.1.5
    One thing I notice is when i go to the message and open the packed message i get this "Cannot display Packed Message in binary format."
    Here is the payload
    XMessage-ID: <[email protected]d.e2open.com>
    MIME-Version: 1.0
    Content-Type: multipart/related;
         boundary="----=_Part_176_29725195.1331307008851";
         type="Application/x-RosettaNet"
    Content-Description: This is the RosettaNet Business Message
    Content-ID: "-15059242:135f6ea5e3c:-62b9"
    ------=_Part_176_29725195.1331307008851
    Content-Type: Application/xml; rnsubtype=preamble-header; name=Preamble
    Content-Transfer-Encoding: binary
    Content-Disposition: attachment; filename=Preamble
    Content-ID: <[email protected]>
    Content-Description: This is the Preamble Header part of the Business Message
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE Preamble SYSTEM "PreamblePartMessageGuideline.dtd">
    <Preamble>
    <DateTimeStamp>20120309T153008.852Z</DateTimeStamp>
    <GlobalAdministeringAuthorityCode>RosettaNet</GlobalAdministeringAuthorityCode>
    <GlobalUsageCode>Production</GlobalUsageCode>
    <VersionIdentifier>1.1</VersionIdentifier>
    </Preamble>
    ------=_Part_176_29725195.1331307008851
    Content-Type: Application/xml; rnsubtype=service-header; name=ServiceHeader
    Content-Transfer-Encoding: binary
    Content-Disposition: attachment; filename=ServiceHeader
    Content-ID: <[email protected]>
    Content-Description: This is the Service Header part of the Business Message
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ServiceHeader SYSTEM "ServiceHeaderPartMessageGuideline.dtd">
    <ServiceHeader>
    <ProcessControl>
    <ProcessIdentity>
    <description>
    <FreeFormText>NotNull</FreeFormText>
    </description>
    <GlobalProcessCode>Request Purchase Order</GlobalProcessCode>
    <GlobalProcessIndicatorCode>3A4</GlobalProcessIndicatorCode>
    <initiatingPartner>
    <GlobalBusinessIdentifier>007710825</GlobalBusinessIdentifier>
    </initiatingPartner>
    <InstanceIdentifier>PIPC0A85CB8135F814CB4200000EAFE56F0</InstanceIdentifier>
    <VersionIdentifier>V02.00</VersionIdentifier>
    </ProcessIdentity>
    <ServiceRoute>
    <fromService>
    <BusinessServiceDescription>
    <GlobalBusinessServiceCode>Seller Service</GlobalBusinessServiceCode>
    </BusinessServiceDescription>
    </fromService>
    <toService>
    <BusinessServiceDescription>
    <GlobalBusinessServiceCode>Buyer Service</GlobalBusinessServiceCode>
    </BusinessServiceDescription>
    </toService>
    </ServiceRoute>
    <TransactionControl>
    <AttemptCount>1</AttemptCount>
    <PartnerRoleRoute>
    <fromRole>
    <PartnerRoleDescription>
    <GlobalPartnerRoleClassificationCode>Seller</GlobalPartnerRoleClassificationCode>
    </PartnerRoleDescription>
    </fromRole>
    <toRole>
    <PartnerRoleDescription>
    <GlobalPartnerRoleClassificationCode>Buyer</GlobalPartnerRoleClassificationCode>
    </PartnerRoleDescription>
    </toRole>
    </PartnerRoleRoute>
    <TransactionIdentity>
    <GlobalTransactionCode>Request Purchase Order</GlobalTransactionCode>
    <InstanceIdentifier>TIC0A85CB8135F814CB4200000EAFE5700</InstanceIdentifier>
    </TransactionIdentity>
    <SignalControl>
    <inResponseTo>
    <ActionIdentity>
    <GlobalBusinessActionCode>Purchase Order Request Action</GlobalBusinessActionCode>
    <InstanceIdentifier>C0A85CB8135F814C33C00000EAFE5670</InstanceIdentifier>
    </ActionIdentity>
    </inResponseTo>
    <InstanceIdentifier>20120309T153008.882Z</InstanceIdentifier>
    <PartnerRoute>
    <fromPartner>
    <PartnerDescription>
    <BusinessDescription>
    <GlobalBusinessIdentifier>364132837</GlobalBusinessIdentifier>
    </BusinessDescription>
    <GlobalPartnerClassificationCode>null</GlobalPartnerClassificationCode>
    </PartnerDescription>
    </fromPartner>
    <toPartner>
    <PartnerDescription>
    <BusinessDescription>
    <GlobalBusinessIdentifier>007710825</GlobalBusinessIdentifier>
    </BusinessDescription>
    <GlobalPartnerClassificationCode>null</GlobalPartnerClassificationCode>
    </PartnerDescription>
    </toPartner>
    </PartnerRoute>
    <SignalIdentity>
    <GlobalBusinessSignalCode>Receipt Acknowledge</GlobalBusinessSignalCode>
    <VersionIdentifier>1.1</VersionIdentifier>
    </SignalIdentity>
    </SignalControl>
    </TransactionControl>
    </ProcessControl>
    </ServiceHeader>
    ------=_Part_176_29725195.1331307008851
    Content-Type: Application/xml; rnsubtype=service-content;
         name=ReceiptAcknowledgement
    Content-Transfer-Encoding: binary
    Content-Disposition: attachment; filename=ReceiptAcknowledgement
    Content-ID: <[email protected]>
    Content-Description: This is the Service Content part of the Business Message
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ReceiptAcknowledgement SYSTEM "ReceiptAcknowledgementMessageGuideline.dtd">
    <ReceiptAcknowledgement>
    <fromRole>
    <PartnerRoleDescription>
    <ContactInformation>
    <contactName>
    <FreeFormText>E2open Support</FreeFormText>
    </contactName>
    <EmailAddress>[email protected]</EmailAddress>
    <telephoneNumber>
    <CommunicationsNumber>650-381-6000</CommunicationsNumber>
    </telephoneNumber>
    </ContactInformation>
    <GlobalPartnerRoleClassificationCode>Seller</GlobalPartnerRoleClassificationCode>
    <PartnerDescription>
    <BusinessDescription>
    <GlobalBusinessIdentifier>364132837</GlobalBusinessIdentifier>
    <GlobalSupplyChainCode>Information Technology</GlobalSupplyChainCode>
    </BusinessDescription>
    <GlobalPartnerClassificationCode>null</GlobalPartnerClassificationCode>
    </PartnerDescription>
    </PartnerRoleDescription>
    </fromRole>
    <receivedDocumentDateTime>
    <DateTimeStamp>20120309T153008.907Z</DateTimeStamp>
    </receivedDocumentDateTime>
    <receivedDocumentIdentifier>
    <ProprietaryDocumentIdentifier>337719</ProprietaryDocumentIdentifier>
    </receivedDocumentIdentifier>
    <thisMessageDateTime>
    <DateTimeStamp>20120309T153008.904Z</DateTimeStamp>
    </thisMessageDateTime>
    <thisMessageIdentifier>
    <ProprietaryMessageIdentifier>20120309T153008.905Z</ProprietaryMessageIdentifier>
    </thisMessageIdentifier>
    <toRole>
    <PartnerRoleDescription>
    <GlobalPartnerRoleClassificationCode>Buyer</GlobalPartnerRoleClassificationCode>
    <PartnerDescription>
    <BusinessDescription>
    <GlobalBusinessIdentifier>007710825</GlobalBusinessIdentifier>
    <GlobalSupplyChainCode>Information Technology</GlobalSupplyChainCode>
    </BusinessDescription>
    <GlobalPartnerClassificationCode>null</GlobalPartnerClassificationCode>
    </PartnerDescription>
    </PartnerRoleDescription>
    </toRole>
    </ReceiptAcknowledgement>
    ------=_Part_176_29725195.1331307008851--

    I do have SR but hoping i can get quicker answer hereYou may always escalate the SR if you are not getting response timely. Anyways, give the reference of this thread in the SR and ask service engineer to file a bug.
    I will email you the wire messageI saw the wire message you mailed across. There are some junk characters in the starting of the payload and that's why parsing is failing. Most probably it is a BOM (Byte Order Mark). Ask your TP to send messages in UTF-8 encoding without BOM or any other junk character in the starting of the message. You may open the wire message payload you mailed across in notepad or textpad and you will able to see those junk characters in the starting of the payload.
    Regards,
    Anuj

  • Facing problem with posting Excel file for download - Content in browser

    I am trying to post an Excel file to download from a servlet to a JSP. The content is written properly but to the IE browser and not in an Excel. I even tried giving the ContentType as Word/CSV etc. But nothing works, the content gets displayed only in the browser.
    PLEASE HELP.
    Code snippet in calling JSP:
    DownloadServlet downServlet = new DownloadServlet();
    downServlet.download(response);
    Code in Servlet:
    public class DownloadServlet extends HttpServlet{
    public void download(HttpServletResponse response) throws IOException {
              /*PrintWriter out = response.getWriter( );
              response.setContentType("text/html");
              out.println("<H1>Hello from a Servlet</h2>"); */
         /*HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("Sheet1");*/
    String strData = "This is a Test for Download";
    byte[] b = strData.getBytes();
    //response.reset();
    response.setHeader("Content-disposition", "attachment; filename=" + "Download.xls");
    response.setContentType( "application/msword" );
    //response.addHeader( "Content-Description", "Download Excel file" );
    ServletOutputStream out = response.getOutputStream();
    out.write(b);
    //out.flush();
    out.close();          
    }

    Hi Naresh,
    My thoughts on a possible solution, convert the last character value to a HEX value and check if it falls within the ASCII/Unicode CP range, Obviously this becomes easier if you are just looking at a single language character set.
    The below FM and code helps you check if the character falls within the ASCII char set.
    DATA: l_in_char TYPE string,
          l_out     TYPE xstring.
    CALL FUNCTION 'NLS_STRING_CONVERT_FROM_SYS'
      EXPORTING
        lang_used                   = sy-langu
        SOURCE                      = l_in_char
      TO_FE                       = 'MS '
    IMPORTING
       RESULT                      = l_out
      SUBSTED                     =
    EXCEPTIONS
       illegal_syst_codepage       = 1
       no_fe_codepage_found        = 2
       could_not_convert           = 3
       OTHERS                      = 4.
    IF l_out LT '0' OR l_out GT '7F'.
      WRITE: 'error'.
    ENDIF.
    Links: http://www.asciitable.com/
              http://www.utf8-chartable.de/unicode-utf8-table.pl
    Regards,
    Chen
    Edited by: Chen K V on Apr 21, 2011 11:25 AM

  • Receiver Mail Adapter content conversion

    Hi
    I have read a lot of forums, etc and changed much on my adapter, but still get a xml file send as an attachment instead of a text file.
    Can anyone please advise on how to change the receiver adapter to covert from xml to text.
    I have added the module processing sequence like follow - please help.
    Processing sequence
    localejbs/AF_Modules/MessageTransformBean  Local Enterprise Bean XML2Plain
    sap.com/com.sap.aii.adapter.mail.app/XIMailAdapterBean Local Enterprise Bean Mail
    Module configuration
    XML2Plain Details.endSeparator                               'nl'
    XML2Plain Details.fieldName                               ZINDUS,TCODE,TDATE,RDATE
    XML2Plain Details.fieldSeparator                          |
    XML2Plain Transform.Class com.sap.aii.messaging.adapter.Conversion      xml/txt
    XML2Plain Transform.ContentDisposition                          attachment;filename="TEBA.txt"
    XML2Plain Transform.ContentType                          xml/plain
    XML2Plain xTransform.recordsetStructure                     Details
    Thanks
    Clinton

    Hi,
    From the mail adapter FAQ,
    <i>How can I set the file name of a mail attachment?
               There are several MIME headers that play a role in how the client retrieves the file name of an attachment. Unfortunately, this behavior differs among various mail clients. The reason for this inconsistent behavior comes from the fact that this mechanism has been extended incrementally. The old way is to use the name parameter in the Content-Type header as specified in RFC1341. For example, you can set the content type of an XML attachment as:
               Content-Type: application/xml; name="abc.xml"
               RFC1521 discourages the use of this name parameter in anticipation of the new header Content-Disposition, which is defined in RFC1806.
               With this Content-Disposition header, you can set the file name as:
               Content-Disposition: attachment; filename="abc.xml"
               Some clients may show the Content-Description value as the file name. The Content-Description header is typically used to associate some descriptive information to an attachment (RFC1341) as in
               Content-Description: my xml file
               To avoid potential interpretation problems, it is recommended to combine the use of these headers.</i>
    Also, the note 779981 describes how to set Content Type in the mapping program. Am not sure, but combining the two, maybe it should be possible! Havent tried something of this sort though!
    Regards
    Bhavesh

  • Meta Tag contents not showing up in google and facebook

    I publish an online newspaper about animal news in nyc. I recently rebuilt my site in dreamweaver and have just added meta tags to my homepage and that of the most recent article. When I do a google search the homepage description comes up with a leadin from an old article. Also when I tried posting the newest article in facebook the meta tag content description did not appear. Can someone tell me how I should correctly write the meta tag in the html so that it appears in google searches and when I post articles on facebook? Below are links to my homepage and the article discussed above, as well as how I wrote the meta tags in the html. Thank you in advance for all your help!
    Best,
    Michael
    http://newyorkcompanion.com/
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>New York Companion</title>
    <meta name="Description" content="The New York Companion is a New York City-based newspaper that exclusively reports animal news. Our mission is to advance animal welfare through promoting adoption, increasing awareness and encouraging resident involvement in animal welfare initiatives." />
    <meta name="Keywords" content="Animal News" />
    http://newyorkcompanion.com/sbpgs/2012/April/High%20Rise%20Syndrome.html
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>New York Companion</title>
    <meta name="Keywords" content="Animal News" />
    <meta property="og:description" content="Every year, thousands of urban housecats fall from unprotected windows in a phenomenon known as High Rise Syndrome. So far this year the ASPCA has seen 26 cases, a nearly 45 percent increase compared with the same period last year. Mild weather could be to blame for the surge this spring. On average during the warm months, the ASPCA sees approximately three to five cases per week." />
    <meta property="og:image" content="http://www.newyorkcompanion.com/sbpgs/2012/April/High%20Rise%20Syndrome.html/<img src="../../../images/articles/2012/April/High Rise Syn_TS.jpg" />

    Michael,
    Breget is referring to the cache maintained by Google. You can't clear or update their cache - unfortunately, all you can do is wait for your site to get crawled (which can take a couple days), and once they have gathered your meta information, they will then update the description in their SERP (which can also take a couple days).
    Interestingly, I looked for your article by searching "new york companion high rise syndrome" and the first result was THIS page!!! This points to another factor which is the more popular your site, the more often it is updated. I would recommend you take a look at Google's Webmaster Tools and do a bit of research into SEO - this should help clarify things more...
    Good luck!
    Jason
    P.S. - It looks like your meta information was entered correctly.

  • Installing a New Language- Mass Updating Info Object Descriptions ?

    We recently installed a new language in our BI 7 system (Patch 16). But the Active SAP delivered info objects (namespace 0nnnn...) did not 'inherit' the SAP provided translations into the new language.
    I can update each info object one by one with descriptions in the new language.
    I can use the translation utility (once I figure it out) to updated the descriptions.
    I can activate standard business content which seems to contain the new language.
    But I'm hoping for something easier and less intrusive. I'm hoping there is a hidden SAP program that merely adds the description in the new language to my existing info objects from the Standard Business Content, without any reverse engienering, redesign, and so forth.
    Is anyone aware of anything like that ?

    Here's the answer from our discussion with SAP.
    There is a program RSDG_LANGUAGE_AFTER_IMPORT that you can run. This program replaces the object description texts in your active SAP Delivered objects with the text description from the Delivered version in the language that you just installed.  Here are OSS notes that are relevant to this issue : OSS Note 562436 and 877049.
    We executed this report using these criteria to replace default English descriptions with the business content descriptions in Polish for our implementation:
    Langauge Key "PL"
    Do not Overwrite Texts turned OFF
    It worked rapidly (150 CPU seconds) and flawlessly. I will say that the program looks for and changes the desription of EVERY object that it can find, and there is no control over changing just query elements or info objects. So step carefully. We plan on running this program in each system (after unlocking) so that we do not have to transport every single standard content object through our development / tests / production environment.
    Once you are finished with this, you will, of course, need to use the translation tools to translate your custom objects. I've personally found the BI 7 translation tools to be much easier to work with than the earlier versions, but that may simply be a symptom of our upgrade process (we just upgraded to BI 7 from BW 3.5)

  • Can someone please share configFile.xml for crawling Content Server Source

    Hi All
    I am trying to create a Content Server Source in SES. I am unable to generate the configFile.xml as mentioned in doc, from UCM.
    Can someone please share the config file.
    Thanks & Regards,
    Amit

    Hi ,
    Thanks lot for replying.
    I am using the same versions. There is one xml file getting generated but its name is not configFile.xml
    In my test it generated one with df2009-04-21-20-16-22-833434567.xml name.
    Please tell me is this the correct file?.
    some contents of it are...
    Line: -----
    <?xml version="1.0" encoding="UTF-8"?>
    <rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.0"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xsi:schemaLocation="http://xmlns.oracle.com/orarss C:\project_drive\SES Application Search\SES Format Schma\orarss.xsd">
    <channel>
    <title>Content</title>
    <link>df2009-04-21-20-16-22-833434567.xml</link>
    <description>The channel contains a feed for content</description>
    <lastBuildDate>2009-04-21T14:46:22.000Z</lastBuildDate>
    <channelDesc xmlns="http://xmlns.oracle.com/orarss" >
    <feedType>full</feedType>
    <sourceName>content_feed</sourceName>
    </channelDesc>
    <item>
    Line: -----
    Thanks a lot... :)

  • Can iTunes show all of an enhanced podcast's written content?

    Is there a way to see in iTunes the all the written content (descriptions often including hyperlinks) that I can read when I playback a podcast on my iPhone?  If not, do you know of any software that will do the job?  I just find it annoying to have to transfer an enhanced podcast such as this one to my iPhone if I don't want to miss anything:
    http://www.xlr8r.com/podcast/2012/01/lv
    Thx people.

    Right-click > Show Description will show the description. No clickable links though. Don't know of any way to get at the other "enhanced" content.
    tt2

  • B2B Attachment Content

    Hi All,
    I'm using RosettaNet V2. In the attachment header, we have the below MIME content,
    ------=_Part_407_426434134.1334235632862
    Content-Type: application/pdf; name="testing2012-04-12T08:00:31-05:00.pdf"
    Content-Transfer-Encoding: base64
    Content-ID: <OE_ORDER_HEADERS@1101972@@@@@@8401483>
    One of our trading partner wants Content-Dispostion too in the attachment header as follows,
    ------=_Part_407_426434134.1334235632862
    Content-Type: application/pdf; name="testing2012-04-12T08:00:31-05:00.pdf"
    Content-Transfer-Encoding: base64
    Content-Description: base64 encoded PDF field ticket attachment
    Content-Disposition: attachment;filename=testing2012-04-12T08:00:31-05:00.pdf
    Content-ID: <OE_ORDER_HEADERS@1101972@@@@@@8401483>
    Please let me know where to set this content disposition MIME parameter?
    TIA,
    Terry

    Hi Terry,
    I don't think Content-Disposition is a mandatory MIME header. You may consider logging a service request with support.
    From RFC http://tools.ietf.org/html/rfc2387 -
    Multipart/Related MIME entities may contain Content-Disposition headers that provide suggestions for the storage and display of a body part. Multipart/Related processing takes precedence over Content-Disposition;Regards,
    Anuj

  • Display RSS Feed Description of selected Title

    Hei There,
    Since i'm no programmer, i should be able to make this happen in siena, so thanks for clear explanations in advance. I would like to display the RSS-Feed Titles in one Listbox, and then show the Content (Description) of the selected RSS-Title in the second
    Listbox. How would i do this? My best attempt ist the following sting which doesnt work:
    rss_1(Filter(Listbox1,SelectedItems!Description))
    rss_1 is my RSS Data Source
    Thank you so much for your Help

    I found a solution to this Problem (Thanks to @Marcel Spring)
    1. Create a gallery (i used a custom gallery)
    2. Use a Text Label as Visual
    3. Only Show RSS-Title
    4. Add Visual HTML Text
    5. Use the function <<Gallery3!Selected!description>> In my example, the Gallery3 was the above mentionend custom gallery.
    Done :-)

  • Why doesn't my custom tag work?

    First, my backend database is MS Access. Nothing I can do about that, unfortunately.
    I have defined three custom tags (no body, no attributes) to display report information from my project tracking/metrics Access database:
    <prefix:showProjectInfo />
    <prefix:showProjectTeam />
    <prefix:showProjectHistory />
    In my JSP, the first tag I use, <prefix:showProjectInfo />, works perfectly. However, <prefix:showProjectTeam /> gives no output.
    First, here is the tld file that defines the tags (report.tld):
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE taglib
            PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
            "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
        <tlib-version>1.0</tlib-version>
        <jsp-version>1.2</jsp-version>
        <short-name>report</short-name>
        <uri>/report</uri>   
        <!-- Forte4J_TLDX:  This comment contains code generation information. Do not delete.
        <tldx>
            <tagHandlerGenerationRoot>classes</tagHandlerGenerationRoot>
        </tldx>
        -->
        <!-- A validator verifies that the tags are used correctly at JSP
             translation time. Validator entries look like this:
          <validator>
              <validator-class>com.mycompany.TagLibValidator</validator-class>
              <init-param>
                 <param-name>parameter</param-name>
                 <param-value>value</param-value>
           </init-param>
          </validator>
       -->
       <!-- A tag library can register Servlet Context event listeners in
            case it needs to react to such events. Listener entries look
            like this:
         <listener>
             <listener-class>com.mycompany.TagLibListener</listener-class>
         </listener>
       -->
       <tag>
            <name>showProjectInfo</name>
            <tag-class>mil.usaf.rad.metrics.report.showProjectInfoTag</tag-class>
            <body-content>empty</body-content>
            <description>Shows the basic project information</description>       
       </tag>
       <tag>
            <name>showProjectTeam</name>
            <tag-class>mil.usaf.rad.metrics.report.showProjectTeamTag</tag-class>
            <body-content>empty</body-content>
       </tag>
       <tag>
            <name>showProjectHistory</name>
            <tag-class>mil.usaf.rad.metrics.report.showProjectHistoryTag</tag-class>
            <body-content>empty</body-content>
       </tag>
    </taglib>Next, here is the relevant section of web.xml that defines this taglib:
      <taglib>
            <taglib-uri>/WEB-INF/report.tld</taglib-uri>
            <taglib-location>/WEB-INF/report.tld</taglib-location>
      </taglib>Next, the code for showProjectTeamTag.java:
    * showProjectTeam.java
    * Created on March 9, 2005, 10:46 AM
    package mil.usaf.rad.metrics.report;
    import java.io.*;
    import java.sql.*;
    import java.lang.Integer;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;
    * @author  jason.ferguson
    public class showProjectTeamTag extends TagSupport
        public showProjectTeamTag()
            super();
        public int doAfterBody() throws JspException
            HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
            int pr_id = Integer.parseInt(req.getParameter("pr_id"));
            JspWriter out = pageContext.getOut();
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try
               out.print("test");
               Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
               conn = DriverManager.getConnection("jdbc:odbc:Metrics");
            catch (Exception e)
                throw new JspException(e.getMessage());
            String queryGetTeam = "SELECT Projects.pr_id, Accounts.name AS Name, Sum(Schedule.hours) AS SumOfhours FROM tblTAAccounts AS Accounts INNER JOIN ((tblTAScheduleEntries AS Schedule INNER JOIN tblProjectRelease AS ProjectRelease ON Schedule.projectID = ProjectRelease.tblFKTimeAccntProject) INNER JOIN tblPMProjects AS Projects ON ProjectRelease.Release_ID = Projects.pr_id) ON Accounts.accountID = Schedule.accountID WHERE Projects.pr_id=" + pr_id + " GROUP BY Projects.pr_id, Accounts.name, ProjectRelease.Release_number, Projects.Project_name";
            try
                out.print(queryGetTeam);
                stmt = conn.createStatement();
                rs = stmt.executeQuery(queryGetTeam);
                if (rs == null)
                    out.print("No Results!");
                out.print("<table>\n");
                out.print("<tr>\n");
                out.print("<th>Name</th>\n");
                out.print("<th>Total Hours</th>\n");
                out.print("</tr>\n");
                while(rs.next())
                    out.print("<tr>\n");
                    out.print("<td>" + rs.getString("Name") + "</td>\n");
                    out.print("<td>" + rs.getInt("SumOfhours") + "</td>\n");
                    out.print("</tr>\n");
                out.print("</table>\n");
                rs.close();
                stmt.close();
                conn.close();
            catch (Exception e)
                throw new JspException(e.getMessage());
            return SKIP_BODY;
    }Finally, projectdetail.jsp, where the tag is called:
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
    <%@page import="java.sql.*" %>
    <%@page import="java.lang.Integer" %>
    <%@taglib uri="/WEB-INF/report.tld" prefix="report" %>
    <html>
    <head><title>Project Detail</title></head>
    <body>
    <h1 align="center">Project Status</h1>
    <h3>Project Description</h3>
    <report:showProjectInfo />
    <h3>Team Members</h3>
    <report:showProjectTeam />
    </body>
    </html>The first tag, <report:showProjectInfo />, works fine. However, I get no output whatsoever when the system encounters <report:showProjectTeam />. I am a relative newbie at this, so any help is appreciated.
    Jason

    It doesnt seem to matter if the code is in doStartTag(), doEndTag(), orr any of the other functions.
    I also put, as the first item in the function:
    System.out.println("TEST");Nothing.
    Just as an aside, here is the code for the <prefix:showProjectInfo />. Maybe I made a mistake in it? I closed the resultset and connection...
    import java.io.*;
    import java.sql.*;
    import java.lang.Integer;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;
    * @author  jason.ferguson
    public class showProjectInfoTag extends BodyTagSupport
        public int doEndTag() throws JspException
            HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
            int pr_id = Integer.parseInt(req.getParameter("pr_id"));
            JspWriter out = pageContext.getOut();
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try
               Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                conn = DriverManager.getConnection("jdbc:odbc:Metrics");
            catch (Exception e)
                throw new JspException(e.getMessage());
            String queryProjectInfo = "SELECT * FROM tblPMProjects WHERE pr_id=" + pr_id;
            try
                stmt = conn.createStatement();
                rs = stmt.executeQuery(queryProjectInfo);
                while (rs.next())
                    out.print("<table border=\"1\" style=\"border-collapse:collapse\">\n");
                    out.print("<tr>\n");
                    out.print("<td><b>Project Name:</b>" + rs.getString("Project_name") + "</td>\n");
                    out.print("<td align=\"right\"><b>RAD Number:</b>" + rs.getString("tblProjectNumber") + "</td>\n");
                    out.print("</tr>\n");
                    out.print("<tr>\n");
                    out.print("<td>Project description: " + rs.getString("Project_description") + "</td>\n");
                    out.print("</tr>\n");
                    out.print("<tr>\n");
                    out.print("<td>Customer: " + rs.getString("Customer_POC") + "</td>");
                    out.print("<tr>\n");
                    out.print("<tr>\n");
                    out.print("<td>Customer Unit: " + rs.getString("Customer_OFC") + "</td>\n");
                    out.print("</tr>\n");
                    out.print("<tr>\n");
                    out.print("<td>Customer Phone: " + rs.getString("Customer_phone") + "</td>\n");
                    out.print("</tr>\n");
                    out.print("</table>\n");
                    rs.close();
                    stmt.close();
                    conn.close();
            catch (Exception e)
                throw new JspException(e.getMessage());
            finally
                //conn.close();
            return SKIP_BODY;

  • Filter Coding Issues

    I've been following (roughly) the simple virus scanner interface that SUN provides, and adapted it into a slightly heavier weight filter that interfaces with libclamav. At first both were compiled using GCC, and I thought due to some of the weird problems I had when debugging flags were inserted, maybe Sun Studio would give better results. It hasn't, and I'm at a bit of a loss as to what to do next.
    The symptom is that parts of the message just dissapear, and I see the old mime boundaries within the message body, so it seems like there's some pointer indicating where the message starts that's being corrupted by something in my code.
    Interestingly, if I stop processing the message while still inside the headers, there is no problem, but that's not a very effective virus scanner if it can only look at the content type and filename of the part now is it?
    This happens regardless of whether I use GCC or CC, and I'm using 0.88.1 of clamav. The output message is shown last. It should be fairly obvious what's wrong with it.
    Here's my code, perhaps someone can tell me what I'm doing wrong.
    ** WARNING ** This IS NOT polished code, so please don't expect it to be perfect. It's clean, but includes absolute pathnames, and some other nauties that should be removed before anyone even thinks of reusing this. Once it actually works, I'll do the nessisary code cleanup, and release this to the community to do whatever anyone wants with.
    Makefile
    SERVER_ROOT=/opt/SUNWmsgsr
    INSTALL_LOCATION=/var/opt/SUNWmsgsr/site-programs/
    INCLUDE=-I${SERVER_ROOT}/include
    LIBPATH=-L${SERVER_ROOT}/lib
    CLAMLIBS=`/usr/local/bin/clamav-config --libs` -lclamav
    CLAMFLAGS=`/usr/local/bin/clamav-config --cflags`
    LIBS=-lmtasdk ${CLAMLIBS}
    FLAGS=${CLAMFLAGS}
    all:
            cc ${FLAGS} -o msgsr_clamav msgsr_clamav.c \
                    ${INCLUDE} ${LIBPATH} ${LIBS}
    install:
            cp msgsr_clamav ${INSTALL_LOCATION}
            cp msgsr_clamav.cnf ${INSTALL_LOCATION}************************************************
    Expansions
    CLAMLIBS=-L/usr/local/lib -lz -lbz2 -lpthread -lclamav
    CLAMFLAGS=-I/usr/local/include -xO4************************************************
    msgsr_clamav.c
    * msgsr_clamav
    * Interface the Sun Java System Message Server with LibClamAV
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <pthread.h>
    #include "clamav.h"     // LibClamAV Header
    #include "mtasdk.h"
    * A structure to store channel options
    typedef struct {
         /* Produce debug output? */
         int debug;
         // Maximum size (in bytes) attachment to scan
         int scan_maxsize;
         // Scan recursion level
         int scan_recursion_level;
         // Max files
         int scan_maxfiles;
         // Path to ClamAV Virus Database
         char db_dir[BIGALFA_SIZE+3];
         // Used Internally by ClamAV. Stored here for ease of access
         struct cl_node *root;
         unsigned int signo;
         struct cl_stat dbstat;
         pthread_mutex_t reload_mutex;
         // MIME types to ignore
         char ignore_mime_types[BIGALFA_SIZE+3];
         // Types of files to ignore
         char ignore_file_types[BIGALFA_SIZE+3];
         /* Unwanted MIME content types (ALWAYS stripped, never scanned) */
         char bad_mime_types[BIGALFA_SIZE+3];
         /* Unwanted file types (ALWAYS stripped, never scanned)*/
         char bad_file_types[BIGALFA_SIZE+3];
         /* Length of bmt string */
         size_t bmt_len;
         /* Length of bft string */
         size_t bft_len;
    } our_options_t;
    // A structure passed per message to contain message specific data, including open files, etc.
    typedef struct {
         // The filename of the temp file in use so it can be unlinked when we're done with it.
         char temp_file_name[BIGALFA_SIZE * 2 + 10];
         // The file * to the temp file in use, so we don't have to reopen it across calls to decode_inspect
         FILE *temp_file;
         // A pointer to the single instance of our_options_t that is shared across all threads
         our_options_t * options;
    } msg_temp_data_t;
    * Forward declarations
    static void error_exit(int ires, const char *msg);
    static void error_report(our_options_t *options, int ires, const char *func);
    static void error_reports(our_options_t *options, const char* errStr, const char *func);
    static int is_bad_mime_type(our_options_t *options, mta_decode_t *dctx, char *buf, size_t maxbuflen);
    static int is_bad_file_type(our_options_t *options, mta_opt_t *params, const char *param_name, char *buf, size_t maxbuflen);
    static int load_options(our_options_t *options);
    static mta_dq_process_message_t process_message;
    static mta_decode_read_t decode_read;
    static mta_decode_inspect_t decode_inspect;
    * main() -- Initialize the MTA SDK, load our options, and then
    * start the message processing loop.
    int main()
         int ires,ret;
         char error_msg[BIGALFA_SIZE+3];
         our_options_t options;
         * Initialize the MTA SDK
         * See explanatory comment 1
         if ((ires = mtaInit(0)))
              error_exit(ires, "Unable to initialize the MTA SDK");
         * Load our channel options
         * See explanatory comment 2
         if ((ires = load_options(&options)))
              error_exit(ires, "Unable to load our channel options");
         * Initialize the ClamAV Virus Engine and Database
         // Preconditions to initializing the ClamAV database
         options.root=NULL; options.signo=0;
         // Load the virus database
         mtaLog("cl_loaddbdir() loading database from %s",options.db_dir);
         if ((ret = cl_loaddbdir(options.db_dir, &options.root, &options.signo)))
              sprintf(error_msg,"cl_loaddbdir() error: %s", cl_strerror(ret));
              error_exit(MTA_NO,error_msg);
         mtaLog("cl_loaddbdir() loaded %d virus definitions",options.signo);
         // Internalize the virus database structure
         mtaLog("cl_build() initializing database");
         if((ret = cl_build(options.root)))
              sprintf(error_msg,"cl_build() error: %s", cl_strerror(ret));
              error_exit(MTA_NO,error_msg);
         // Keep track of database updates
         memset(&options.dbstat, 0, sizeof(struct cl_stat));
         cl_statinidir(options.db_dir, &options.dbstat);
         // Initialize our reload mutex
         if (ret = pthread_mutex_init(&options.reload_mutex,NULL))
              sprintf(error_msg,"pthread_mutex_init() error: %d", ret);
              error_exit(MTA_NO,error_msg);
         * Now process the queued messages. Be sure to indicate a
         * thread stack size sufficient to accomodate message
         * enqueue processing.
         * See explanatory comment 3
         if ((ires = mtaDequeueStart((void *)&options,
         process_message, NULL, 0)))
         error_exit(ires, "Error during dequeue processing");
         * All done
         cl_free(options.root);
         mtaDone();
         return(0);
    *Reloads the virus database and re-initializes the in memory structure
    * Loads a new virus database, then if all succeeds, it
    * swaps the new database with the old one.  It's assumed
    * clamav releases the database gracefully, but another mutex
    * may be required if this is not the case.
    static int reload_database(our_options_t *options)
         struct cl_node *newroot = NULL,*oldroot;
         char error_msg[BIGALFA_SIZE+3];
         int ret;
         unsigned int signo=0;
         if (pthread_mutex_trylock(&options->reload_mutex)) {     // Only one reload at a time thank you.
              if(cl_statchkdir(&options->dbstat) == 1) {     // Make sure we actually need an update
                   mtaLog("reload_database() Virus database is stale... reloading");
                   mtaLog("cl_loaddbdir() reloading database from %s",options->db_dir);
                   // Load the new virus database
                   if ((ret = cl_loaddbdir(options->db_dir, &newroot, &signo)))
                        mtaLog("cl_loaddbdir() error: %s", cl_strerror(ret));
                        return (-1);
                   mtaLog("cl_loaddbdir() loaded %d virus definitions",options->signo);
                   // Internalize the virus database structure
                   mtaLog("cl_build() re-initializing database");
                   if((ret = cl_build(newroot)))
                        mtaLog("cl_build() error: %s", cl_strerror(ret));
                        mtaLog("reload_database() Database reload aborted");
                        cl_free(newroot);
                        return (-2);
                   // Save a pointer to the old root
                   oldroot = options->root;
                   // Swap in the new root and signo
                   options->root = newroot;
                   options->signo = signo;
                   // Release the old root
                   cl_free(oldroot);
                   mtaLog("database_reload() Successfully loaded new virus database");
                   // Keep track of database updates
                   cl_statfree(&options->dbstat);
                   cl_statinidir(options->db_dir, &options->dbstat);
              pthread_mutex_unlock(&options->reload_mutex);
    * process_message() -- This routine is called by
    * mtaDequeueStart() to process each queued
    * message. We don&#31258; make use of ctx2, but
    * ctx1 is a pointer to our channel options.
    * See explanatory comment 4
    static int process_message(void **ctx2, void *ctx1, mta_dq_t *dq, const char *env_from, size_t env_from_len)
         const char *adr;
         int disp, ires;
         size_t len;
         mta_nq_t *nq;
         msg_temp_data_t msg_data;
         * Initializations
         nq = NULL;
         msg_data.options = (our_options_t *)ctx1;
         msg_data.temp_file = NULL;
         * Check the virus database to make sure it isn't stale
         * If it it's not currently reloading, and is stale, reload it.
         //if(cl_statchkdir(&(msg_data.options->dbstat)) == 1)
         //     reload_database(msg_data.options);
         * A little macro to do error checking on mta*() calls
         #define CHECK(f,x) \
         if ((ires = x)) { error_report(msg_data.options, ires, f); goto \
              done_bad; }
         * Start a message enqueue. Use the dequeue context to copy
         * envelope flags fromt the current message to this new
         * message being enqueued.
         * See explanatory comment 5
         CHECK("mtaEnqueueStart", mtaEnqueueStart(&nq, env_from, env_from_len, MTA_DQ_CONTEXT, dq, 0));
         * Process the envelope recipient list
         * See explanatory comment 6
         while (!(ires = mtaDequeueRecipientNext(dq, &adr, &len, 0)))
              * Add this envelope recipient address to the message
              * being enqueued. Use the dequeue context to copy
              * envelope flags for this recipient from the current
              * message to the new message.
              ires = mtaEnqueueTo(nq, adr, len, MTA_DQ_CONTEXT,
              dq, MTA_ENV_TO, 0);
              /* See explanatory comment 7 */
              disp = (ires) ? MTA_DISP_DEFERRED : MTA_DISP_RELAYED;
              CHECK("mtaDequeueRecipientDisposition", mtaDequeueRecipientDisposition(dq, adr, len,disp, 0));
         * A normal exit from the loop occurs when
         * mtaDequeueRecipientNext() returns an MTA_EOF status.
         * Any other status signifies an error.
         if (ires != MTA_EOF)
              error_report(msg_data.options, ires, "mtaDequeueRecipientNext");
              goto done_bad;
         * Begin the MIME decode of the message
         * See explanatory comment 8
         CHECK("mtaDecodeMessage",
              mtaDecodeMessage(
              /* Private context is our message data structure */
              (void *)&msg_data,
              /* Input is the message being dequeued */
              MTA_DECODE_DQ, (void *)dq,
              /* Output is the message being enqueued */
              MTA_DECODE_NQ, (void *)nq,
              /* Inspection routine */
              decode_inspect,
              /* Convert non-MIME formats to MIME */
              MTA_DECODE_THURMAN,
              0));
         * Finish the enqueue
         * NOTE: IT&#25285; IMPORTANT TO DO THIS before DOING THE
         * DEQUEUE. YOU WILL LOSE MAIL IF YOU DO THE DEQUEUE FIRST
         * and then THE ENQUEUE FAILS.
         * See explanatory text 9
         CHECK("mtaEnqueueFinish", mtaEnqueueFinish(nq, 0));
         nq = NULL;
         * Finish the dequeue
         CHECK("mtaDequeueFinish", mtaDequeueMessageFinish(dq, 0));
         * All done with this message
         return(MTA_OK);
    done_bad:
         * Abort any ongoing enqueue or dequeue
         if (nq)
              mtaEnqueueFinish(nq, MTA_ABORT, 0);
         if (dq)
              mtaDequeueMessageFinish(dq, MTA_ABORT, 0);
         * And return our error status
         return(ires);
    #undef CHECK
    * decode_inspect() -- This is the routine that inspects each
    * message part, deciding whether to accept
    * or reject it.
    * See explanatory comment 10
    static int decode_inspect(void *ctx, mta_decode_t *dctx, int data_type,const char *data, size_t data_len)
         char buf[BIGALFA_SIZE * 2 + 10];
         const char *virname;
         int i;
         static unsigned int part_c = 1;
         msg_temp_data_t *msg_data = (msg_temp_data_t *)ctx;
         strncpy(buf,data,data_len);
         buf[data_len] = 0;
         mtaLog("decode_inspect() (%d,%ud): %s",data_type,dctx,buf);
         switch (data_type)
              case MTA_DATA_HEADER:
              * See if the part has:
              * 1. A bad MIME content-type,
              * 2. A bad file name extension in the (deprecated)
              * NAME= content-type parameter, or
              * 3. A bad file name extension in the
              * FILENAME= content-disposition parameter.
              i = 0;
              if ((i = is_bad_mime_type((void *)msg_data->options, dctx, buf, sizeof(buf))) ||
                   is_bad_file_type((void *)msg_data->options,mtaDecodeMessageInfoParams(dctx,MTA_DECODE_CTYPE_PARAMS, NULL),"NAME", buf, sizeof(buf)) ||
                   is_bad_file_type((void *)msg_data->options,mtaDecodeMessageInfoParams(dctx,MTA_DECODE_CDISP_PARAMS, NULL),"FILENAME", buf, sizeof(buf)))
                   char msg[BIGALFA_SIZE*4 + 10];
                   * Replace this part with a text message indicating
                   * that the part&#30196; content has been deleted.
                   * See explanatory comment 11
                   if (i)
                        i = sprintf(msg,
                             "The content of this message part has been removed.\n"
                             "It contained a potentially harmful media type of %.*s",
                             strlen(buf)-2, buf+1);
                   else
                        i = sprintf(msg,
                             "The content of this message part has been removed.\n"
                             "It contained a potentially harmful file named '%s'", buf);
                   mtaLog("decode_inspect(): %s",msg);
                   return(mtaDecodeMessagePartDelete(dctx,
                        MTA_REASON, msg, i,
                        MTA_DECODE_CTYPE, "text", 4,
                        MTA_DECODE_CSUBTYPE, "plain", 5,
                        MTA_DECODE_CCHARSET, "us-ascii", 8,
                        MTA_DECODE_CDISP, "inline", 6,
                        MTA_DECODE_CLANG, "en", 2, 0));
              } break; // case MTA_DATA_HEADER:
              case MTA_DATA_TEXT:
              case MTA_DATA_BINARY:
                   if (msg_data->temp_file == NULL)
                        sprintf(msg_data->temp_file_name,"/tmp/%i.tmp",part_c++);
                        mtaLog("messageDecode(): Opening Temp File %s",msg_data->temp_file_name);
                        msg_data->temp_file = fopen(msg_data->temp_file_name,"wb");
                   fwrite(data,data_len,1,msg_data->temp_file);
                   return(MTA_OK);
                   break;
              case MTA_DATA_NONE:
                   fflush(msg_data->temp_file);
                   fclose(msg_data->temp_file);
                   msg_data->temp_file = NULL;
                   struct cl_limits limits;
                   memset(&limits, 0, sizeof(struct cl_limits));
                   /* maximal number of files in archive */;
                   limits.maxfiles = 1000;
                   /* maximal archived file size */
                   limits.maxfilesize = 10 * 1048576; /* 10 MB */
                   /* maximal recursion level */
                   limits.maxreclevel = 5;
                   /* maximal compression ratio */
                   limits.maxratio = 200;
                   /* disable memory limit for bzip2 scanner */
                   limits.archivememlim = 0;
                   i = cl_scanfile(msg_data->temp_file_name, &virname, NULL, msg_data->options->root,&limits,CL_SCAN_STDOPT);
                   unlink (msg_data->temp_file_name);
                   if(i == CL_VIRUS) {
                        char msg[BIGALFA_SIZE*4 + 10];
                        size_t idlen;
                        i = sprintf(msg,
                             "The content of this message part has been removed.\n"
                             "It contained the virus %s in a file named '%s'", virname,buf);
                        mtaDequeueInfo(dctx,MTA_ENV_ID,&buf,&idlen);
                        buf[idlen] = '\0';
                        mtaLog("decode_inspect(): Detected %s virus in part %i of msg ID %s",virname,0,buf);
                        return(mtaDecodeMessagePartDelete(dctx,
                             MTA_REASON, msg, i,
                             MTA_DECODE_CTYPE, "text", 4,
                             MTA_DECODE_CSUBTYPE, "plain", 5,
                             MTA_DECODE_CCHARSET, "us-ascii", 8,
                             MTA_DECODE_CDISP, "inline", 6,
                             MTA_DECODE_CLANG, "en", 2, 0));
                   } else {
                        if(i != CL_CLEAN)
                             mtaLog("decode_inspect() Error: %s scanning file %s",cl_strerror(i),msg_data->temp_file_name);
                        else
                             mtaLog("decode_inspect(): Part in file %s is clean",msg_data->temp_file_name);
                        //return(mtaDecodeMessagePartCopy(dctx, 0));
                        return(MTA_OK); break;
         return(MTA_OK);
    * is_bad_mime_type() -- See if the part&#30196; media type is in our
    * bad MIME content types, for example:
    * application/vbscript
    * See explanatory comment 13
    static int is_bad_mime_type(our_options_t *options,
    mta_decode_t *dctx, char *buf,
    size_t maxbuflen)
         const char *csubtype, *ctype;
         size_t i, len1, len2;
         char *ptr;
         * Sanity checks
         if (!options || !options->bmt_len ||
              !options->bad_mime_types[0] ||
              !dctx)
              return(0);
         * Get the MIME content type
         ctype = mtaDecodeMessageInfoString(dctx, MTA_DECODE_CTYPE,NULL, &len1);
         csubtype = mtaDecodeMessageInfoString(dctx,MTA_DECODE_CSUBTYPE,NULL, &len2);
         * Build the string: <0x01>type/subtype<0x01><0x00>
         ptr = buf;
         *ptr++ = (char)0x01;
         for (i = 0; i < len1; i++)
              *ptr++ = tolower(*ctype++);
         *ptr++ = '/';
         for (i = 0; i < len2; i++)
              *ptr++ = tolower(*csubtype++);
         *ptr++ = (char)0x01;
         *ptr = '\0';
         * Now see if the literal just built occurs in the list of
         * bad MIME content types
         return((strstr(options->bad_mime_types, buf)) ? -1 : 0);
    * is_bad_file_type() -- See if the part has an associated file
    * name whose file extension is in our list
    * of bad file names, such as .vbs.
    * See explanatory comment 14
    static int is_bad_file_type(our_options_t *options,
    mta_opt_t *params,
    const char *param_name, char *buf,
    size_t maxbuflen)
         const char *ptr1;
         char fext[BIGALFA_SIZE+2], *ptr2;
         size_t i, len;
         * Sanity checks
         if (!options || !options->bft_len || !params || !param_name)
              return(0);
         len = 0;
         buf[0] = '\0';
         if (mtaOptionString(params, param_name, 0, buf, &len,
              maxbuflen - 1) ||
              !len || !buf[0])
              * No file name parameter specified
              return(0);
         * A file name parameter was specified. Parse it to
         * extract the file extension portion, if any.
         ptr1 = strrchr(buf, '.');
         if (!ptr1)
              * No file extension specified
              return(0);
         * Now store the string created earlier in fext[]
         * Note that we drop the &#12539;&#12539;from the extension.
         ptr1++; /* Skip over the &#12539;&#12539;*/
         ptr2 = fext;
         *ptr2++ = (char)0x01;
         len = len - (ptr1 - buf);
         for (i = 0; i < len; i++)
              *ptr2++ = tolower(*ptr1++);
         *ptr2++ = (char)0x01;
         *ptr2++ = '\0';
         * Now return -1 if the string occurs in
         * options->bad_file_types.
         return((strstr(options->bad_file_types, fext)) ? -1 : 0);
    * load_options() -- Load our channel options from the channel&#30196;
    * option file
    * See explanatory comment 15
    static int load_options(our_options_t *options)
         char buf[BIGALFA_SIZE+1];
         size_t buflen, i;
         mta_opt_t *channel_opts;
         int ires;
         const char *ptr0;
         char *ptr1;
         * Initialize the our private channel option structure
         memset(options, 0, sizeof(our_options_t));
         * Set internal defaults for important features
         options->scan_maxsize = 10 * 1024 * 1024; // 10 MB
         options->scan_recursion_level = 10;
         options->scan_maxfiles = 200;
         strcpy(options->db_dir,cl_retdbdir()); // Default ClamAV Directory
         * Access the channel&#30196; option file
         * See explanatory comment 16
         channel_opts = NULL;
         if ((ires = mtaOptionStart(&channel_opts, "/var/opt/SUNWmsgsr/site-programs/msgsr_clamav.cnf", 0, 0)))
              mtaLog("Unable to access our channel option file");
              return(ires);
         * DEBUG=0|1
         options->debug = 0;
         mtaOptionInt(channel_opts, "DEBUG", 0, &options->debug);
         if (options->debug)
              mtaDebug(MTA_DEBUG_SDK, 0);
         * BAD_MIME_TYPES=type1/subtype1[,type2/subtype2[,...]]
         buf[0] = '\0';
         mtaOptionString(channel_opts, "BAD_MIME_TYPES", 0, buf,
         &buflen, sizeof(buf));
         * Now translate the comma separated list:
         * Type1/Subtype1[,Type2/Subtype2[,...]]
         * to
         *<0x01>type1/subtype1[<0x01>type2/subtype2[<0x01>...]]<0x01>
         ptr0 = buf;
         ptr1 = options->bad_mime_types;
         *ptr1++ = (char)0x01;
         for (i = 0; i < buflen; i++)
              if (*ptr0 != ',')
                   *ptr1++ = tolower(*ptr0++);
              else
                   *ptr1++ = (char)0x01;
                   ptr0++;
         *ptr1++ = (char)0x01;
         *ptr1 = '\0';
         options->bmt_len = ptr1 - options->bad_mime_types;
         * BAD_FILE_TYPES=["."]Ext1[,["."]Ext2[,...]]
         buf[0] = '\0';
         buflen = 0;
         mtaOptionString(channel_opts, "BAD_FILE_TYPES", 0, buf,
         &buflen, sizeof(buf));
         * Now translate the comma separated list:
         * ["."]Ext1[,["."]Ext2[,...]]
         * to
         * <0x01>ext1[<0x01>ext2[<0x01>...]]<0x01>
         ptr0 = buf;
         ptr1 = options->bad_file_types;
         *ptr1++ = (char)0x01;
         for (i = 0; i < buflen; i++)
              switch(*ptr0)
                   default : /* copy after translating to lower case */
                        *ptr1++ = tolower(*ptr0++);
                        break;
                   case '.' : /* discard */
                        break;
                   case ',' : /* end current type */
                        *ptr1++ = (char)0x01;
                        ptr0++;
                   break;
         *ptr1++ = (char)0x01;
         *ptr1 = '\0';
         options->bft_len = ptr1 - options->bad_file_types;
         * Dispose of the mta_opt_t context
         * See explanatory comment 17
         mtaOptionFinish(channel_opts);
         * And return a success
         return(MTA_OK);
    * error_report() &#12539;Report an error condition when debugging is
    * enabled.
    static void error_report(our_options_t *options, int ires,
    const char *func)
         if (options->debug)
              mtaLog("%s() returned %d; %s",
                   (func ? func : "?"), ires, mtaStrError(ires,0));
    static void error_reports(our_options_t *options, const char* errStr,
    const char *func)
         if (options->debug)
              mtaLog("%s() reported: %s",
                   (func ? func : "?"), errStr);
    * error_exit() -- Exit with an error status and error message.
    static void error_exit(int ires, const char *msg)
         mtaLog("%s%s%s", (msg ? msg : ""), (msg ? "; " : ""),
         mtaStrError(ires,0));
         exit(1);
    msgsr_clamav.cnf
    DEBUG=1
    BAD_MIME_TYPES=application/vbscript
    BAD_FILE_TYPES=bat,pif,vb,vbs,chs,exe************************************************
    broken message
    Return-path: <[email protected]>
    Received: from virusscan-daemon.apple.california.com by apple.california.com
    (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
    id <[email protected]> for [email protected]; Thu,
    20 Apr 2006 07:30:13 -0700 (PDT)
    Received: from california.com ([209.159.129.16])
    by apple.california.com (Sun Java System Messaging Server 6.2-3.04 (built Jul
    15 2005)) with ESMTP id <[email protected]> for
    [email protected]; Thu, 20 Apr 2006 07:30:05 -0700 (PDT)
    Received: from [61.23.221.222] by apple.california.com (mshttpd); Thu,
    20 Apr 2006 14:30:05 +0000 (GMT)
    Content-return: allowed
    Date: Thu, 20 Apr 2006 14:30:05 +0000 (GMT)
    From: [email protected]
    Subject: Re: testing
    In-reply-to: <[email protected]>
    To: [email protected]
    Message-id: <[email protected]>
    MIME-version: 1.0
    X-Mailer: Sun Java(tm) System Messenger Express 6.2-3.04 (built Jul 15 2005)
    Content-type: multipart/alternative;
    boundary="Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)"
    Content-language: en
    X-Accept-Language: en
    Priority: normal
    References: <[email protected]>
    Original-recipient: rfc822;[email protected]
    This is a multi-part message in MIME format.
    --Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
    Content-type: text/plain; charset=us-ascii
    Content-transfer-encoding: 7bit
    Content-disposition: inline
    Data is missing from here
    ----ec04832708e231d6e2f
    --Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
    Content-type: text/html; charset=us-ascii
    Content-transfer-encoding: quoted-printable
    Content-disposition: inline
    Data is missing from here
    nal Message -----=3Cbr=3EFrom=3A chales=40california=2Ecom=3Cbr=3EDate=3A=
    Thursday=2C April 20=2C 2006 11=3A19 pm=3Cbr=3ESubject=3A testing=3Cbr=3E=
    To=3A chales=40california=2Ecom=3Cbr=3E=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B =3Cbr=3E=26gt=3B
    ----ec04832708e231d6e2f
    --Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
    Content-type: text/x-vcard; name=chales.vcf; charset=us-ascii
    Content-transfer-encoding: base64
    Content-disposition: attachment; filename=chales.vcf
    Content-description: Card for <[email protected]>
    bA0KdGVsO3dvcms6NTEwLTI4Ny04NDUwDQp1cmw6aHR0cDovL3d3dy5jYWxpZm9ybmlh
    LmNvbS8NCm9yZzpDYWxpZm9ybmlhQ29tLCBJbmM7DQp2ZXJzaW9uOjIuMQ0KZW1haWw7
    aW50ZXJuZXQ6Y2hhbGVzQGNhbGlmb3JuaWEuY29tDQp0aXRsZTpTeXN0ZW0gQWRtaW5p
    c3RyYXRvcg0KZW5kOnZjYXJkDQo=
    ----ec04832708e231d6e2f--
    Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)

    Ok, so it's not my code. Using the virus_scanner_simple.c example from SUN, if you change the decode_inspect routine to return MTA_OK for every call (which should technically just let the message pass) it has the same behavior as my program. (Not all that suprising since mine is a derivative of said program)
    That said, this now looks like a library issue. I'm using Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005) according to the SMTP prompt, and was wondering if perhaps I should apply:
    http://sunsolve.sun.com/search/document.do?assetkey=1-21-118207-42-1&searchclause=6306404
    The issue seems to be in the mtaDecodeMessage function, and occurs when the decode_inspect function is allowed to parse the message body, not just the message headers.
    The machine is a Sun Ultra 4500 running Solaris 10. Here's the banner:
    SunOS cookie 5.10 Generic_118822-23 sun4u sparc SUNW,Ultra-Enterprise
    Has anyone else had similar problems using the MTA SDK? Is there anything I'm missing here (besides the above mentioned patch) that might fix this?

Maybe you are looking for

  • Ipod issues ?

    I'm trying to update my ipod, but when I plug it and it starts to update mssage appears saying : itunes:iTunes.exe-corrupt file the file or directory\ipod_control\iTunes\iTunesprefs is corrupt and unreadable-please run the chkdsk utiliy. Though there

  • Nokia 5800 Firmware update V20

    Hi all , can anyone advise if this works with the phone as i keep hearing about system failure notice with the new version ? who has installed it on there phone and does it make any difference ?? Message Edited by 5800uk on 19-Feb-2009 05:47 PM

  • Is there an SDK to read/import *.ai files?

    I would like to read/import the vector graphics from an *.ai file into my own 2D drawing package. Is there an SDK to do this? thanks. -bill

  • Podcast Listing on iTunes

    I have a podcast feed going to iTunes but the iTunes listing has not updated since April. Many new podcasts have been uploaded since then. Any one know how to get that listing up to date?

  • Can we hide the URLs of any gatewayed services?

    Hi friends, I urgently need to get a solution for a problem. Can we hide the URLs of any gatewayed services? Thanks and regards, Veeshoo