/* ==================================================================== 
 * The Kannel Software License, Version 1.0 
 * 
 * Copyright (c) 2001-2018 Kannel Group  
 * Copyright (c) 1998-2001 WapIT Ltd.   
 * All rights reserved. 
 * 
 * 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. The end-user documentation included with the redistribution, 
 *    if any, must include the following acknowledgment: 
 *       "This product includes software developed by the 
 *        Kannel Group (http://www.kannel.org/)." 
 *    Alternately, this acknowledgment may appear in the software itself, 
 *    if and wherever such third-party acknowledgments normally appear. 
 * 
 * 4. The names "Kannel" and "Kannel Group" must not be used to 
 *    endorse or promote products derived from this software without 
 *    prior written permission. For written permission, please  
 *    contact org@kannel.org. 
 * 
 * 5. Products derived from this software may not be called "Kannel", 
 *    nor may "Kannel" appear in their name, without prior written 
 *    permission of the Kannel Group. 
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 KANNEL GROUP OR ITS 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. 
 * ==================================================================== 
 * 
 * This software consists of voluntary contributions made by many 
 * individuals on behalf of the Kannel Group.  For more information on  
 * the Kannel Group, please see <http://www.kannel.org/>. 
 * 
 * Portions of this software are based upon software originally written at  
 * WapIT Ltd., Helsinki, Finland for the Kannel project.  
 */ 

/*
 * wap_ppg_session_machine.def: macro call to generate the machine to store 
 * data for WAP connected pushes.
 * See architecture document for guidance how to use this.
 *
 * Fields of the machine have following meaning:
 *        a) Identification: pi_push_id, push_id, sender_address
 *
 *        b) Implementing PAP attribute (see PPG Services, Chapter 6):
 *           message_state, code, desc, event_time, delivery_method
 *
 *        c) Session this push uses: session_id, addr_tuple
 *
 *        d) fields to implement time dependent push: timestamp and field to
 *           store the message
 *
 *        e) field to implement priority: a priority field. Priority scheme
 *           stores the message, too.
 *
 *        f) fields to store push message data until the session is establish-
 *           ed: push headers, push data, push capabilities.
 *
 *        g) field to define network and bearer PI is asking: address_type
 *
 *        h) fields to specify reporting to PI: progress_notes_requested, ppg_
 *           notify_requested_to
 *
 *        i) PI authentication fields: authentication fields for this push: 
 *           authenticated, trusted. 
 *
 *        j) Smsc used for pushing 
 *
 *        k) fields used for delivery reports: dlr_url, dlr_mask, smsbox_id,
 *           service_name
 *
 * By Aarno Syvänen for Wapit Ltd, for Wiral Ltd and for Global Networks Inc
 */

#if !defined(MACHINE)
    #error "Macro MACHINE is missing"
#elif !defined(INTEGER)
    #error "Macro INTEGER is missing"
#elif !defined(OCTSTR)
    #error "Macro OCTSTR is missing"
#elif !defined(OPTIONAL_OCTSTR)
    #error "Macro OPTIONAL_OCTSTR is missing"
#elif !defined(ADDRTUPLE)
    #error "Macro ADDRTUPLE is missing"
#elif !defined(CAPABILITIES)
    #error "Macro CAPABILITIES is missing"
#elif !defined(HTTPHEADER)
    #error "Macro HTTPHEADER is missing"
#endif

MACHINE(OCTSTR(pi_push_id)       /* this id is selected by PI and SHOULD 
                                    include data separating different PIs */
        INTEGER(push_id)         /* this id is generated by Kannel */
        OPTIONAL_OCTSTR(sender_address)  /* PPG address known by PI */
        INTEGER(message_state)   /* Implementing PAP attribute */
        INTEGER(code)
        OPTIONAL_OCTSTR(desc)
        OCTSTR(event_time)
        INTEGER(delivery_method)
        INTEGER(session_id)      /* link to the push session */
        ADDRTUPLE(addr_tuple)
        OPTIONAL_OCTSTR(deliver_after_timestamp) /* for time dependent push, 
                                                  in PAP format */
        INTEGER(priority)        /* for QoS attribute priority */
        HTTPHEADER(push_headers) 
        OPTIONAL_OCTSTR(push_data)        
        INTEGER(address_type)    /* defining the network */
        INTEGER(progress_notes_requested)/* do we send progress notes about 
                                            this push */
        OPTIONAL_OCTSTR(ppg_notify_requested_to) /* do we notify PI the 
                                                   results */
        INTEGER(authenticated)   /* transferring trust from the client to
                                    PPG */
        INTEGER(trusted)  
        OPTIONAL_OCTSTR(smsc_id) /* smsc used for pushes */
        OPTIONAL_OCTSTR(dlr_url) /* for delivery reports */
        INTEGER(dlr_mask)
        OPTIONAL_OCTSTR(smsbox_id)
        OPTIONAL_OCTSTR(service_name)
       )

#undef MACHINE
#undef INTEGER
#undef OCTSTR
#undef OPTIONAL_OCTSTR
#undef ADDRTUPLE
#undef CAPABILITIES
#undef HTTPHEADER
