Patch for pjsua2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all,

currently it is not possible to compile a pjsua2 application with C++17. The reason is that C++17 removes support for dynamic exception specifications (that is "throws ..." declarations at the end of a function). Unfortunately PJSUA2 makes heavy use of exception specifications and most PJSUA2 functions are declared as "throw (Error)" - meaning that they can throw an exception of type "Error" that the programmer is supposed to catch.

The consequence is that a lot of compile errors can be observed when compiling a pjsua2 application with C++17. The compile errors look as follows:

/usr/local/include/pjsua2/json.hpp:80:33: error: ISO C++17 does not allow dynamic exception specifications
     virtual string saveString() throw(Error);
                                 ^~~~~

The compile of the same application worked fine when using the C++14 standard, but it got broken when I switched from C++14 to the C++17 standard.

See https://www.bfilipek.com/2017/05/cpp17-details-fixes-deprecation.html#removing-deprecated-exception-specifications-from-c17 and http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0003r0.html for more background about the removal of exception specifications.

To make the application compile again, I had to remove "throw(Error)" in the whole PJSUA2 source code and include files. This seems to be the only viable and good fix for this issue. I wrote my own "sed" script to do that and made some cosmetic corrections afterwards. Then I generated the attached patch file. Could you please apply this patch to the code base or give me feedback what I still need to improve? I verified that pjsip compiles fine with the patch applied.

Thank you very much!


Best regards,

   Christian
Index: aconfigure
===================================================================
Index: aconfigure.ac
===================================================================
Index: pjsip/include/pjsua2/account.hpp
===================================================================
--- pjsip/include/pjsua2/account.hpp	(revision 5883)
+++ pjsip/include/pjsua2/account.hpp	(working copy)
@@ -174,7 +174,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -181,7 +181,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 
 };
 
@@ -273,7 +273,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -280,7 +280,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -331,7 +331,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -338,7 +338,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -398,7 +398,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -405,7 +405,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -438,7 +438,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -445,7 +445,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -692,7 +692,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -699,7 +699,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -781,7 +781,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -788,7 +788,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -884,7 +884,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -891,7 +891,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -971,7 +971,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -978,7 +978,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -1077,7 +1077,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -1084,7 +1084,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -1132,7 +1132,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -1139,7 +1139,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
     
 } AccountIpChangeConfig;
 
@@ -1234,7 +1234,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -1241,7 +1241,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 
@@ -1642,7 +1642,7 @@
      * @param make_default	Make this the default account.
      */
     void create(const AccountConfig &cfg,
-                bool make_default=false) throw(Error);
+                bool make_default=false);
 
     /**
      * Shutdown the account. This will initiate unregistration if needed,
@@ -1664,7 +1664,7 @@
      * @param cfg 		New account config to be applied to the
      * 				account.
      */
-    void modify(const AccountConfig &cfg) throw(Error);
+    void modify(const AccountConfig &cfg);
 
     /**
      * Check if this account is still valid.
@@ -1677,7 +1677,7 @@
      * Set this as default account to be used when incoming and outgoing
      * requests don't match any accounts.
      */
-    void setDefault() throw(Error);
+    void setDefault();
 
     /**
      * Check if this account is the default account. Default account will be
@@ -1709,7 +1709,7 @@
      *
      * @return			Account info.
      */
-    AccountInfo getInfo() const throw(Error);
+    AccountInfo getInfo() const;
 
     /**
      * Update registration or perform unregistration. Application normally
@@ -1719,7 +1719,7 @@
      * @param renew		If False, this will start unregistration
      * 				process.
      */
-    void setRegistration(bool renew) throw(Error);
+    void setRegistration(bool renew);
 
     /**
      * Set or modify account's presence online status to be advertised to
@@ -1730,7 +1730,7 @@
      *
      * @param pres_st		Presence online status.
      */
-    void setOnlineStatus(const PresenceStatus &pres_st) throw(Error);
+    void setOnlineStatus(const PresenceStatus &pres_st);
 
     /**
      * Lock/bind this account to a specific transport/listener. Normally
@@ -1746,7 +1746,7 @@
      *
      * @param tp_id		The transport ID.
      */
-    void setTransport(TransportId tp_id) throw(Error);
+    void setTransport(TransportId tp_id);
 
     /**
      * Send NOTIFY to inform account presence status or to terminate server
@@ -1756,7 +1756,7 @@
      *
      * @param prm		The sending NOTIFY parameter.
      */
-    void presNotify(const PresNotifyParam &prm) throw(Error);
+    void presNotify(const PresNotifyParam &prm);
     
     /**
      * Enumerate all buddies of the account.
@@ -1763,7 +1763,7 @@
      *
      * @return			The buddy list.
      */
-    const BuddyVector& enumBuddies() const throw(Error);
+    const BuddyVector& enumBuddies() const;
 
     /**
      * Find a buddy in the buddy list with the specified URI. 
@@ -1776,7 +1776,7 @@
      * @return			The pointer to buddy.
      */
     Buddy* findBuddy(string uri, FindBuddyMatch *buddy_match = NULL) const
-		    throw(Error);
+		   ;
 
 public:
     /*
Index: pjsip/include/pjsua2/call.hpp
===================================================================
--- pjsip/include/pjsua2/call.hpp	(revision 5883)
+++ pjsip/include/pjsua2/call.hpp	(working copy)
@@ -1245,7 +1245,7 @@
      *
      * @return              Call info.
      */
-    CallInfo getInfo() const throw(Error);
+    CallInfo getInfo() const;
     
     /**
      * Check if this call has active INVITE session and the INVITE
@@ -1344,7 +1344,7 @@
      *
      * @see Endpoint::natGetType(), natTypeInSdp
      */
-    pj_stun_nat_type getRemNatType() throw(Error);
+    pj_stun_nat_type getRemNatType();
 
     /**
      * Make outgoing call to the specified URI.
@@ -1355,7 +1355,7 @@
      * @param prm.txOption  Optional headers etc to be added to outgoing INVITE
      *                      request.
      */
-    void makeCall(const string &dst_uri, const CallOpParam &prm) throw(Error);
+    void makeCall(const string &dst_uri, const CallOpParam &prm);
 
     /**
      * Send response to incoming INVITE request with call setting param.
@@ -1379,7 +1379,7 @@
      *                      be persistent in all next answers/responses for this
      *                      INVITE request.
      */
-    void answer(const CallOpParam &prm) throw(Error);
+    void answer(const CallOpParam &prm);
     
     /**
      * Hangup call by using method that is appropriate according to the
@@ -1399,7 +1399,7 @@
      * @param prm.txOption  Optional list of headers etc to be added to outgoing
      *                      request/response message.
      */
-    void hangup(const CallOpParam &prm) throw(Error);
+    void hangup(const CallOpParam &prm);
     
     /**
      * Put the specified call on hold. This will send re-INVITE with the
@@ -1413,7 +1413,7 @@
      * @param prm.txOption  Optional message components to be sent with
      *                      the request.
      */
-    void setHold(const CallOpParam &prm) throw(Error);
+    void setHold(const CallOpParam &prm);
     
     /**
      * Send re-INVITE.
@@ -1428,7 +1428,7 @@
      * @param prm.txOption  Optional message components to be sent with
      *                      the request.
      */
-    void reinvite(const CallOpParam &prm) throw(Error);
+    void reinvite(const CallOpParam &prm);
     
     /**
      * Send UPDATE request.
@@ -1438,7 +1438,7 @@
      * @param prm.txOption  Optional message components to be sent with
      *                      the request.
      */
-    void update(const CallOpParam &prm) throw(Error);
+    void update(const CallOpParam &prm);
     
     /**
      * Initiate call transfer to the specified address. This function will send
@@ -1455,7 +1455,7 @@
      * @param prm.txOption  Optional message components to be sent with
      *                      the request.
      */
-    void xfer(const string &dest, const CallOpParam &prm) throw(Error);
+    void xfer(const string &dest, const CallOpParam &prm);
 
     /**
      * Initiate attended call transfer. This function will send REFER request
@@ -1473,7 +1473,7 @@
      *                      the request.
      */
     void xferReplaces(const Call& dest_call,
-                      const CallOpParam &prm) throw(Error);
+                      const CallOpParam &prm);
     
     /**
      * Accept or reject redirection response. Application MUST call this
@@ -1497,7 +1497,7 @@
      *                      callback, except that the PJSIP_REDIRECT_PENDING is
      *                      not accepted here.
      */
-    void processRedirect(pjsip_redirect_op cmd) throw(Error);
+    void processRedirect(pjsip_redirect_op cmd);
 
     /**
      * Send DTMF digits to remote using RFC 2833 payload formats.
@@ -1504,7 +1504,7 @@
      *
      * @param digits        DTMF string digits to be sent.
      */
-    void dialDtmf(const string &digits) throw(Error);
+    void dialDtmf(const string &digits);
 
     /**
      * Send DTMF digits to remote.
@@ -1511,7 +1511,7 @@
      *
      * @param param	The send DTMF parameter.
      */
-    void sendDtmf(const CallSendDtmfParam &param) throw (Error);
+    void sendDtmf(const CallSendDtmfParam &param);
     
     /**
      * Send instant messaging inside INVITE session.
@@ -1525,7 +1525,7 @@
      * @param prm.userData  Optional user data, which will be given back when
      *                      the IM callback is called.
      */
-    void sendInstantMessage(const SendInstantMessageParam& prm) throw(Error);
+    void sendInstantMessage(const SendInstantMessageParam& prm);
     
     /**
      * Send IM typing indication inside INVITE session.
@@ -1536,7 +1536,7 @@
      *                      outgoing request.
      */
     void sendTypingIndication(const SendTypingIndicationParam &prm)
-         throw(Error);
+        ;
     
     /**
      * Send arbitrary request with the call. This is useful for example to send
@@ -1548,7 +1548,7 @@
      * @param prm.txOption  Optional message body and/or list of headers to be
      *                      included in outgoing request.
      */
-    void sendRequest(const CallSendRequestParam &prm) throw(Error);
+    void sendRequest(const CallSendRequestParam &prm);
     
     /**
      * Dump call and media statistics to string.
@@ -1558,7 +1558,7 @@
      *
      * @return              Call dump and media statistics string.
      */
-    string dump(bool with_media, const string indent) throw(Error);
+    string dump(bool with_media, const string indent);
     
     /**
      * Get the media stream index of the default video stream in the call.
@@ -1596,7 +1596,7 @@
      *                      (see CallVidSetStreamParam).
      */
     void vidSetStream(pjsua_call_vid_strm_op op,
-                      const CallVidSetStreamParam &param) throw(Error);
+                      const CallVidSetStreamParam &param);
 
     /**
      * Get media stream info for the specified media index.
@@ -1605,7 +1605,7 @@
      *
      * @return              The stream info.
      */
-    StreamInfo getStreamInfo(unsigned med_idx) const throw(Error);
+    StreamInfo getStreamInfo(unsigned med_idx) const;
     
     /**
      * Get media stream statistic for the specified media index.
@@ -1614,7 +1614,7 @@
      *
      * @return              The stream statistic.
      */
-    StreamStat getStreamStat(unsigned med_idx) const throw(Error);
+    StreamStat getStreamStat(unsigned med_idx) const;
     
     /**
      * Get media transport info for the specified media index.
@@ -1623,7 +1623,7 @@
      *
      * @return              The transport info.
      */
-    MediaTransportInfo getMedTransportInfo(unsigned med_idx) const throw(Error);
+    MediaTransportInfo getMedTransportInfo(unsigned med_idx) const;
 
     /**
      * Internal function (callled by Endpoint( to process update to call
Index: pjsip/include/pjsua2/endpoint.hpp
===================================================================
--- pjsip/include/pjsua2/endpoint.hpp	(revision 5883)
+++ pjsip/include/pjsua2/endpoint.hpp	(working copy)
@@ -560,7 +560,7 @@
      *
      * @param node		Container to write values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container.
@@ -567,7 +567,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 
 };
 
@@ -660,7 +660,7 @@
      *
      * @param node		Container to write values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container.
@@ -667,7 +667,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 
@@ -879,7 +879,7 @@
      *
      * @param node		Container to write values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container.
@@ -886,7 +886,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 
@@ -909,7 +909,7 @@
      *
      * @param node		Container to write values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container.
@@ -916,7 +916,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 
 };
 
@@ -941,7 +941,7 @@
 {
 public:
     /** Retrieve the singleton instance of the endpoint */
-    static Endpoint &instance() throw(Error);
+    static Endpoint &instance();
 
     /** Default constructor */
     Endpoint();
@@ -965,7 +965,7 @@
      * are properly initialized. Once this function has returned success,
      * application must call libDestroy() before quitting.
      */
-    void libCreate() throw(Error);
+    void libCreate();
 
     /**
      * Get library state.
@@ -983,7 +983,7 @@
      *
      * @param prmEpConfig	Endpoint configurations
      */
-    void libInit( const EpConfig &prmEpConfig) throw(Error);
+    void libInit( const EpConfig &prmEpConfig);
 
     /**
      * Call this function after all initialization is done, so that the
@@ -990,7 +990,7 @@
      * library can do additional checking set up. Application may call this
      * function any time after init().
      */
-    void libStart() throw(Error);
+    void libStart();
 
     /**
      * Register a thread that was created by external or native API to the
@@ -1000,7 +1000,7 @@
      *
      * @param name	The optional name to be assigned to the thread.
      */
-    void libRegisterThread(const string &name) throw(Error);
+    void libRegisterThread(const string &name);
 
     /**
      * Check if this thread has been registered to the library. Note that
@@ -1049,7 +1049,7 @@
      *
      * @param prmFlags	Combination of pjsua_destroy_flag enumeration.
      */
-    void libDestroy(unsigned prmFlags=0) throw(Error);
+    void libDestroy(unsigned prmFlags=0);
 
 
     /*************************************************************************
@@ -1122,7 +1122,7 @@
      * 				given to utilTimerCancel().
      */
     Token utilTimerSchedule(unsigned prmMsecDelay,
-                            Token prmUserData) throw (Error);
+                            Token prmUserData);
 
     /**
      * Cancel previously scheduled timer with the specified timer token.
@@ -1144,7 +1144,7 @@
     /**
      * Get cipher list supported by SSL/TLS backend.
      */
-    IntVector utilSslGetAvailableCiphers() throw (Error);
+    IntVector utilSslGetAvailableCiphers();
 
     /*************************************************************************
      * NAT operations
@@ -1161,7 +1161,7 @@
      *
      * Note that STUN must be enabled to run this function successfully.
      */
-    void natDetectType(void) throw(Error);
+    void natDetectType(void);
 
     /**
      * Get the NAT type as detected by natDetectType() function. This
@@ -1172,7 +1172,7 @@
      * Exception: if this function is called while detection is in progress,
      * PJ_EPENDING exception will be raised.
      */
-    pj_stun_nat_type natGetType() throw(Error);
+    pj_stun_nat_type natGetType();
 
     /**
      * Update the STUN servers list. The libInit() must have been called
@@ -1198,7 +1198,7 @@
      *
      */
     void natUpdateStunServers(const StringVector &prmServers,
-                              bool prmWait) throw(Error);
+                              bool prmWait);
 
     /**
      * Auxiliary function to resolve and contact each of the STUN server
@@ -1228,7 +1228,7 @@
      */
     void natCheckStunServers(const StringVector &prmServers,
                              bool prmWait,
-                             Token prmUserData) throw(Error);
+                             Token prmUserData);
 
     /**
      * Cancel pending STUN resolution which match the specified token.
@@ -1243,7 +1243,7 @@
      * Exception: PJ_ENOTFOUND if there is no matching one, or other error.
      */
     void natCancelCheckStunServers(Token token,
-                                   bool notify_cb = false) throw(Error);
+                                   bool notify_cb = false);
 
     /*************************************************************************
      * Transport operations
@@ -1259,7 +1259,7 @@
      * @return			The transport ID.
      */
     TransportId transportCreate(pjsip_transport_type_e type,
-                                const TransportConfig &cfg) throw(Error);
+                                const TransportConfig &cfg);
 
     /**
      * Enumerate all transports currently created in the system. This
@@ -1269,7 +1269,7 @@
      *
      * @return			Array of transport IDs.
      */
-    IntVector transportEnum() throw(Error);
+    IntVector transportEnum();
 
     /**
      * Get information about transport.
@@ -1278,7 +1278,7 @@
      *
      * @return			Transport info.
      */
-    TransportInfo transportGetInfo(TransportId id) throw(Error);
+    TransportInfo transportGetInfo(TransportId id);
 
     /**
      * Disable a transport or re-enable it. By default transport is always
@@ -1290,7 +1290,7 @@
      * @param enabled		Enable or disable the transport.
      *
      */
-    void transportSetEnable(TransportId id, bool enabled) throw(Error);
+    void transportSetEnable(TransportId id, bool enabled);
 
     /**
      * Close the transport. The system will wait until all transactions are
@@ -1299,7 +1299,7 @@
      *
      * @param id		Transport ID.
      */
-    void transportClose(TransportId id) throw(Error);
+    void transportClose(TransportId id);
     
     /**
      * Start graceful shutdown procedure for this transport handle. After
@@ -1314,7 +1314,7 @@
      *
      * @param tp		The transport.
      */
-    void transportShutdown(TransportHandle tp) throw(Error);
+    void transportShutdown(TransportHandle tp);
 
     /*************************************************************************
      * Call operations
@@ -1372,7 +1372,7 @@
      *
      * @return		The list of media port.
      */
-    const AudioMediaVector &mediaEnumPorts() const throw(Error);
+    const AudioMediaVector &mediaEnumPorts() const;
 
     /**
      * Get the instance of Audio Device Manager.
@@ -1397,7 +1397,7 @@
      *
      * @return		Array of codec info.
      */
-    const CodecInfoVector &codecEnum() throw(Error);
+    const CodecInfoVector &codecEnum();
 
     /**
      * Change codec priority.
@@ -1409,7 +1409,7 @@
      *
      */
     void codecSetPriority(const string &codec_id,
-			  pj_uint8_t priority) throw(Error);
+			  pj_uint8_t priority);
 
     /**
      * Get codec parameters.
@@ -1420,7 +1420,7 @@
      * 			will be thrown.
      *
      */
-    CodecParam codecGetParam(const string &codec_id) const throw(Error);
+    CodecParam codecGetParam(const string &codec_id) const;
 
     /**
      * Set codec parameters.
@@ -1431,7 +1431,7 @@
      *
      */
     void codecSetParam(const string &codec_id,
-		       const CodecParam param) throw(Error);
+		       const CodecParam param);
 
     /**
      * Enum all supported video codecs in the system.
@@ -1438,7 +1438,7 @@
      *  
      * @return		Array of video codec info.
      */
-    const CodecInfoVector &videoCodecEnum() throw(Error);
+    const CodecInfoVector &videoCodecEnum();
 
     /**
      * Change video codec priority.
@@ -1451,7 +1451,7 @@
      *
      */
     void videoCodecSetPriority(const string &codec_id,
-			       pj_uint8_t priority) throw(Error);
+			       pj_uint8_t priority);
 
     /**
      * Get video codec parameters.
@@ -1462,7 +1462,7 @@
      *			will be thrown.
      *
      */
-    VidCodecParam getVideoCodecParam(const string &codec_id) const throw(Error);
+    VidCodecParam getVideoCodecParam(const string &codec_id) const;
 
     /**
      * Set video codec parameters.
@@ -1472,7 +1472,7 @@
      *
      */
     void setVideoCodecParam(const string &codec_id,
-			    const VidCodecParam &param) throw(Error);
+			    const VidCodecParam &param);
 			    
     /**
      * Reset video codec parameters to library default settings.
@@ -1480,7 +1480,7 @@
      * @param codec_id	Codec ID.
      *
      */
-    void resetVideoCodecParam(const string &codec_id) throw(Error);
+    void resetVideoCodecParam(const string &codec_id);
 
     /**
      * Enumerate all SRTP crypto-suite names.
@@ -1487,7 +1487,7 @@
      *
      * @return		The list of SRTP crypto-suite name.
      */
-    StringVector srtpCryptoEnum() throw(Error);
+    StringVector srtpCryptoEnum();
 
     /*************************************************************************
      * IP Change
@@ -1512,7 +1512,7 @@
      *
      * @return		PJ_SUCCESS on success, other on error.
      */
-    void handleIpChange(const IpChangeParam &param) throw(Error);
+    void handleIpChange(const IpChangeParam &param);
 
 public:
     /*
Index: pjsip/include/pjsua2/json.hpp
===================================================================
--- pjsip/include/pjsua2/json.hpp	(revision 5883)
+++ pjsip/include/pjsua2/json.hpp	(working copy)
@@ -58,7 +58,7 @@
      *
      * @param filename		The file name.
      */
-    virtual void   loadFile(const string &filename) throw(Error);
+    virtual void   loadFile(const string &filename);
 
     /**
      * Load this document from string.
@@ -65,7 +65,7 @@
      *
      * @param input		The string.
      */
-    virtual void   loadString(const string &input) throw(Error);
+    virtual void   loadString(const string &input);
 
     /**
      * Write this document to a file.
@@ -72,12 +72,12 @@
      *
      * @param filename		The file name.
      */
-    virtual void   saveFile(const string &filename) throw(Error);
+    virtual void   saveFile(const string &filename);
 
     /**
      * Write this document to string.
      */
-    virtual string saveString() throw(Error);
+    virtual string saveString();
 
     /**
      * Get the root container node for this document
Index: pjsip/include/pjsua2/media.hpp
===================================================================
--- pjsip/include/pjsua2/media.hpp	(revision 5883)
+++ pjsip/include/pjsua2/media.hpp	(working copy)
@@ -218,7 +218,7 @@
     /**
     * Get information about the specified conference port.
     */
-    ConfPortInfo getPortInfo() const throw(Error);
+    ConfPortInfo getPortInfo() const;
 
     /**
      * Get port Id.
@@ -228,7 +228,7 @@
     /**
      * Get information from specific port id.
      */
-    static ConfPortInfo getPortInfoFromId(int port_id) throw(Error);
+    static ConfPortInfo getPortInfoFromId(int port_id);
 
     /**
      * Establish unidirectional media flow to sink. This media port
@@ -243,7 +243,7 @@
      *
      * @param sink		The destination Media.
      */
-    void startTransmit(const AudioMedia &sink) const throw(Error);
+    void startTransmit(const AudioMedia &sink) const;
 
     /**
      * Establish unidirectional media flow to sink. This media port
@@ -271,8 +271,7 @@
      * @param param		The parameter.
      */
     void startTransmit2(const AudioMedia &sink, 
-			const AudioMediaTransmitParam &param) const
-         throw(Error);
+			const AudioMediaTransmitParam &param) const;
 
     /**
      *  Stop media flow to destination/sink port.
@@ -280,7 +279,7 @@
      * @param sink		The destination media.
      *
      */
-    void stopTransmit(const AudioMedia &sink) const throw(Error);
+    void stopTransmit(const AudioMedia &sink) const;
 
     /**
      * Adjust the signal level to be transmitted from the bridge to this
@@ -290,7 +289,7 @@
      *				level adjustment, while value 0 means to mute
      *				the port.
      */
-    void adjustRxLevel(float level) throw(Error);
+    void adjustRxLevel(float level);
 
     /**
      * Adjust the signal level to be received from this media port (to
@@ -300,7 +299,7 @@
      *				level adjustment, while value 0 means to mute
      *				the port.
      */
-    void adjustTxLevel(float level) throw(Error);
+    void adjustTxLevel(float level);
 
     /**
      * Get the last received signal level.
@@ -307,7 +306,7 @@
      *
      * @return			Signal level in percent.
      */
-    unsigned getRxLevel() const throw(Error);
+    unsigned getRxLevel() const;
 
     /**
      * Get the last transmitted signal level.
@@ -314,7 +313,7 @@
      *
      * @return			Signal level in percent.
      */
-    unsigned getTxLevel() const throw(Error);
+    unsigned getTxLevel() const;
 
     /**
      * Typecast from base class Media. This is useful for application written
@@ -351,7 +350,7 @@
      * param port  the media port to be registered to the conference bridge.
      *
      */
-    void registerMediaPort(MediaPort port) throw(Error);
+    void registerMediaPort(MediaPort port);
 
     /**
      * This method needs to be called by descendants of this class to remove
@@ -419,7 +418,7 @@
      *			 PJMEDIA_FILE_NO_LOOP to prevent playback loop.
      */
     void createPlayer(const string &file_name,
-		      unsigned options=0) throw(Error);
+		      unsigned options=0);
 
     /**
      * Create a file playlist media port, and automatically add the port
@@ -434,7 +433,7 @@
      */
     void createPlaylist(const StringVector &file_names,
 			const string &label="",
-			unsigned options=0) throw(Error);
+			unsigned options=0);
 
     /**
      * Get additional info about the player. This operation is only valid
@@ -442,7 +441,7 @@
      *
      * @return		the info.
      */
-    AudioMediaPlayerInfo getInfo() const throw(Error);
+    AudioMediaPlayerInfo getInfo() const;
 
     /**
      * Get current playback position in samples. This operation is not valid
@@ -450,7 +449,7 @@
      *
      * @return		   Current playback position, in samples.
      */
-    pj_uint32_t getPos() const throw(Error);
+    pj_uint32_t getPos() const;
 
     /**
      * Set playback position in samples. This operation is not valid for
@@ -458,7 +457,7 @@
      *
      * @param samples	   The desired playback position, in samples.
      */
-    void setPos(pj_uint32_t samples) throw(Error);
+    void setPos(pj_uint32_t samples);
 
     /**
      * Typecast from base class AudioMedia. This is useful for application
@@ -543,7 +542,7 @@
     void createRecorder(const string &file_name,
 			unsigned enc_type=0,
 			pj_ssize_t max_size=0,
-			unsigned options=0) throw(Error);
+			unsigned options=0);
 
     /**
      * Typecast from base class AudioMedia. This is useful for application
@@ -639,7 +638,7 @@
      * Create tone generator.
      */
     void createToneGenerator(unsigned clock_rate = 16000,
-			     unsigned channel_count = 1) throw(Error);
+			     unsigned channel_count = 1);
 
     /**
      * Check if the tone generator is still busy producing some tones.
@@ -650,13 +649,13 @@
     /**
      * Instruct the tone generator to stop current processing.
      */
-    void stop() throw(Error);
+    void stop();
 
     /**
      * Rewind the playback. This will start the playback to the first
      * tone in the playback list.
      */
-    void rewind() throw(Error);
+    void rewind();
 
     /**
      * Instruct the tone generator to play single or dual frequency tones
@@ -669,7 +668,7 @@
      * @param loop	    Play the tone in a loop.
      */
     void play(const ToneDescVector &tones,
-              bool loop=false) throw(Error);
+              bool loop=false);
 
     /**
      * Instruct the tone generator to play multiple MF digits with each of
@@ -683,7 +682,7 @@
      * @param loop	    Play the tone in a loop.
      */
     void playDigits(const ToneDigitVector &digits,
-                    bool loop=false) throw(Error);
+                    bool loop=false);
 
     /**
      * Get the digit-map currently used by this tone generator.
@@ -690,7 +689,7 @@
      *
      * @return		    The digitmap currently used by the tone generator
      */
-    ToneDigitMapVector getDigitMap() const throw(Error);
+    ToneDigitMapVector getDigitMap() const;
 
     /**
      * Set digit map to be used by the tone generator.
@@ -697,7 +696,7 @@
      *
      * @param digit_map	    Digitmap to be used by the tone generator.
      */
-    void setDigitMap(const ToneDigitMapVector &digit_map) throw(Error);
+    void setDigitMap(const ToneDigitMapVector &digit_map);
 
 private:
     pj_pool_t *pool;
@@ -787,7 +786,7 @@
      *
      * @return 			Device ID of the capture device.
      */
-    int getCaptureDev() const throw(Error);
+    int getCaptureDev() const;
 
     /**
      * Get the AudioMedia of the capture audio device.
@@ -794,7 +793,7 @@
      *
      * @return			Audio media for the capture device.
      */
-    AudioMedia &getCaptureDevMedia() throw(Error);
+    AudioMedia &getCaptureDevMedia();
 
     /**
      * Get currently active playback sound devices. If sound devices has not
@@ -802,7 +801,7 @@
      *
      * @return 			Device ID of the playback device.
      */
-    int getPlaybackDev() const throw(Error);
+    int getPlaybackDev() const;
 
     /**
      * Get the AudioMedia of the speaker/playback audio device.
@@ -809,7 +808,7 @@
      *
      * @return			Audio media for the speaker/playback device.
      */
-    AudioMedia &getPlaybackDevMedia() throw(Error);
+    AudioMedia &getPlaybackDevMedia();
 
     /**
      * Select or change capture sound device. Application may call this
@@ -819,7 +818,7 @@
      *
      * @param capture_dev   	Device ID of the capture device.
      */
-    void setCaptureDev(int capture_dev) const throw(Error);
+    void setCaptureDev(int capture_dev) const;
 
     /**
      * Select or change playback sound device. Application may call this
@@ -829,7 +828,7 @@
      *
      * @param playback_dev   	Device ID of the playback device.
      */
-    void setPlaybackDev(int playback_dev) const throw(Error);
+    void setPlaybackDev(int playback_dev) const;
 
     /**
      * Enum all audio devices installed in the system.
@@ -836,7 +835,7 @@
      *
      * @return			The list of audio device info.
      */
-    const AudioDevInfoVector &enumDev() throw(Error);
+    const AudioDevInfoVector &enumDev();
 
     /**
      * Set pjsua to use null sound device. The null sound device only provides
@@ -844,7 +843,7 @@
      * any hardware.
      *
      */
-    void setNullDev() throw(Error);
+    void setNullDev();
 
     /**
      * Disconnect the main conference bridge from any sound devices, and let
@@ -863,7 +862,7 @@
      *				of #pjsua_snd_dev_mode
      *
      */
-    void setSndDevMode(unsigned mode) const throw(Error);
+    void setSndDevMode(unsigned mode) const;
 
     /**
      * Change the echo cancellation settings.
@@ -889,7 +888,7 @@
      *				Normally the value should be zero.
      *
      */
-    void setEcOptions(unsigned tail_msec, unsigned options) throw(Error);
+    void setEcOptions(unsigned tail_msec, unsigned options);
 
     /**
      * Get current echo canceller tail length.
@@ -897,7 +896,7 @@
      * @return			The EC tail length in milliseconds,
      *				If AEC is disabled, the value will be zero.
      */
-    unsigned getEcTail() const throw(Error);
+    unsigned getEcTail() const;
 
     /**
      * Check whether the sound device is currently active. The sound device
@@ -916,7 +915,7 @@
      * any method that accepts audio device index as its parameter.
      *
      */
-    void refreshDevs() throw(Error);
+    void refreshDevs();
 
     /**
      * Get the number of sound devices installed in the system.
@@ -935,7 +934,7 @@
      * @return			The device information which will be filled in
      * 				by this method once it returns successfully.
      */
-    AudioDevInfo getDevInfo(int id) const throw(Error);
+    AudioDevInfo getDevInfo(int id) const;
 
     /**
      * Lookup device index based on the driver and device name.
@@ -947,7 +946,7 @@
      * 				Error will be thrown.
      */
     int lookupDev(const string &drv_name,
-		  const string &dev_name) const throw(Error);
+		  const string &dev_name) const;
 
     /**
      * Get string info for the specified capability.
@@ -978,7 +977,7 @@
      *
      */
     void
-    setExtFormat(const MediaFormatAudio &format, bool keep=true) throw(Error);
+    setExtFormat(const MediaFormatAudio &format, bool keep=true);
 
     /**
      * Get the audio format capability (other than PCM) of the sound device
@@ -995,7 +994,7 @@
      * @return	    		The audio format.
      *
      */
-    MediaFormatAudio getExtFormat() const throw(Error);
+    MediaFormatAudio getExtFormat() const;
 
     /**
      * This will configure audio input latency control or query capability to
@@ -1016,7 +1015,7 @@
      *				for future use.
      */
     void
-    setInputLatency(unsigned latency_msec, bool keep=true) throw(Error);
+    setInputLatency(unsigned latency_msec, bool keep=true);
 
     /**
      * Get the audio input latency control or query capability of the sound
@@ -1033,7 +1032,7 @@
      * @return	    		The audio input latency.
      *
      */
-    unsigned getInputLatency() const throw(Error);
+    unsigned getInputLatency() const;
 
     /**
      * This will configure audio output latency control or query capability to
@@ -1055,7 +1054,7 @@
      *
      */
     void
-    setOutputLatency(unsigned latency_msec, bool keep=true) throw(Error);
+    setOutputLatency(unsigned latency_msec, bool keep=true);
 
     /**
      * Get the audio output latency control or query capability of the sound
@@ -1072,7 +1071,7 @@
      * @return	    		The audio output latency.
      *
      */
-    unsigned getOutputLatency() const throw(Error);
+    unsigned getOutputLatency() const;
 
     /**
      * This will configure audio input volume level capability to the
@@ -1094,7 +1093,7 @@
      * 				future use.
      *
      */
-    void setInputVolume(unsigned volume, bool keep=true) throw(Error);
+    void setInputVolume(unsigned volume, bool keep=true);
 
     /**
      * Get the audio input volume level capability of the sound device being
@@ -1111,7 +1110,7 @@
      * @return	    		The audio input volume level, in percent.
      *
      */
-    unsigned getInputVolume() const throw(Error);
+    unsigned getInputVolume() const;
 
     /**
      * This will configure audio output volume level capability to the sound
@@ -1132,7 +1131,7 @@
      * 				for future use.
      *
      */
-    void setOutputVolume(unsigned volume, bool keep=true) throw(Error);
+    void setOutputVolume(unsigned volume, bool keep=true);
 
     /**
      * Get the audio output volume level capability of the sound device being
@@ -1149,7 +1148,7 @@
      * @return	    		The audio output volume level, in percent.
      *
      */
-    unsigned getOutputVolume() const throw(Error);
+    unsigned getOutputVolume() const;
 
     /**
      * Get the audio input signal level capability of the sound device being
@@ -1166,7 +1165,7 @@
      * @return	    		The audio input signal level, in percent.
      *
      */
-    unsigned getInputSignal() const throw(Error);
+    unsigned getInputSignal() const;
 
     /**
      * Get the audio output signal level capability of the sound device being
@@ -1183,7 +1182,7 @@
      * @return	    		The audio output signal level, in percent.
      *
      */
-    unsigned getOutputSignal() const throw(Error);
+    unsigned getOutputSignal() const;
 
     /**
      * This will configure audio input route capability to the sound device
@@ -1205,7 +1204,7 @@
      *
      */
     void
-    setInputRoute(pjmedia_aud_dev_route route, bool keep=true) throw(Error);
+    setInputRoute(pjmedia_aud_dev_route route, bool keep=true);
 
     /**
      * Get the audio input route capability of the sound device being used.
@@ -1222,7 +1221,7 @@
      * @return	    		The audio input route.
      *
      */
-    pjmedia_aud_dev_route getInputRoute() const throw(Error);
+    pjmedia_aud_dev_route getInputRoute() const;
 
     /**
      * This will configure audio output route capability to the sound device
@@ -1244,7 +1243,7 @@
      *
      */
     void
-    setOutputRoute(pjmedia_aud_dev_route route, bool keep=true) throw(Error);
+    setOutputRoute(pjmedia_aud_dev_route route, bool keep=true);
 
     /**
      * Get the audio output route capability of the sound device being used.
@@ -1261,7 +1260,7 @@
      * @return	    		The audio output route.
      *
      */
-    pjmedia_aud_dev_route getOutputRoute() const throw(Error);
+    pjmedia_aud_dev_route getOutputRoute() const;
 
     /**
      * This will configure audio voice activity detection capability to
@@ -1282,7 +1281,7 @@
      *				future use.
      *
      */
-    void setVad(bool enable, bool keep=true) throw(Error);
+    void setVad(bool enable, bool keep=true);
 
     /**
      * Get the audio voice activity detection capability of the sound device
@@ -1298,7 +1297,7 @@
      * @return	    		The audio voice activity detection feature.
      *
      */
-    bool getVad() const throw(Error);
+    bool getVad() const;
 
     /**
      * This will configure audio comfort noise generation capability to
@@ -1319,7 +1318,7 @@
      *				future use.
      *
      */
-    void setCng(bool enable, bool keep=true) throw(Error);
+    void setCng(bool enable, bool keep=true);
 
     /**
      * Get the audio comfort noise generation capability of the sound device
@@ -1335,7 +1334,7 @@
      * @return	    		The audio comfort noise generation feature.
      *
      */
-    bool getCng() const throw(Error);
+    bool getCng() const;
 
     /**
      * This will configure audio packet loss concealment capability to
@@ -1356,7 +1355,7 @@
      *				future use.
      *
      */
-    void setPlc(bool enable, bool keep=true) throw(Error);
+    void setPlc(bool enable, bool keep=true);
 
     /**
      * Get the audio packet loss concealment capability of the sound device
@@ -1372,7 +1371,7 @@
      * @return	    		The audio packet loss concealment feature.
      *
      */
-    bool getPlc() const throw(Error);
+    bool getPlc() const;
 
 private:
     AudioDevInfoVector		 audioDevList;
@@ -1389,7 +1388,7 @@
     ~AudDevManager();
 
     void clearAudioDevList();
-    int getActiveDev(bool is_capture) const throw(Error);
+    int getActiveDev(bool is_capture) const;
 
     friend class Endpoint;
 };
@@ -1548,7 +1547,7 @@
      *
      * @return			video window info.
      */
-    VideoWindowInfo getInfo() const throw(Error);
+    VideoWindowInfo getInfo() const;
     
     /**
      * Show or hide window. This operation is not valid for native windows
@@ -1559,7 +1558,7 @@
      * 				hide the window.
      *
      */
-    void Show(bool show) throw(Error);
+    void Show(bool show);
     
     /**
      * Set video window position. This operation is not valid for native windows
@@ -1569,7 +1568,7 @@
      * @param pos		The window position.
      *
      */
-    void setPos(const MediaCoordinate &pos) throw(Error);
+    void setPos(const MediaCoordinate &pos);
     
     /**
      * Resize window. This operation is not valid for native windows
@@ -1579,7 +1578,7 @@
      * @param size		The new window size.
      *
      */
-    void setSize(const MediaSize &size) throw(Error);
+    void setSize(const MediaSize &size);
     
     /**
      * Rotate the video window. This function will change the video orientation
@@ -1592,7 +1591,7 @@
      *				Specify positive value for clockwise rotation or
      *				negative value for counter-clockwise rotation.
      */
-    void rotate(int angle) throw(Error);
+    void rotate(int angle);
 
     /**
      * Set output window. This operation is valid only when the underlying
@@ -1602,7 +1601,7 @@
      *
      * @param win		The new output window.
      */
-    void setWindow(const VideoWindowHandle &win) throw(Error);
+    void setWindow(const VideoWindowHandle &win);
     
 private:
     pjsua_vid_win_id		winId;
@@ -1691,12 +1690,12 @@
      *
      * @param p		Video preview parameters. 
      */
-    void start(const VideoPreviewOpParam &param) throw(Error);
+    void start(const VideoPreviewOpParam &param);
 
     /**
      * Stop video preview.
      */
-    void stop() throw(Error);
+    void stop();
 
     /*
      * Get the preview window handle associated with the capture device,if any.
@@ -1785,7 +1784,7 @@
      * variables of type pjmedia_vid_dev_index) before calling any function
      * that accepts video device index as its parameter.
      */
-    void refreshDevs() throw(Error);
+    void refreshDevs();
 
     /**
      * Get the number of video devices installed in the system.
@@ -1801,7 +1800,7 @@
      * 
      * @return		The list of video device info
      */
-    VideoDevInfo getDevInfo(int dev_id) const throw(Error);
+    VideoDevInfo getDevInfo(int dev_id) const;
 
     /**
      * Enum all video devices installed in the system.
@@ -1808,7 +1807,7 @@
      *
      * @return		The list of video device info
      */
-    const VideoDevInfoVector &enumDev() throw(Error);
+    const VideoDevInfoVector &enumDev();
 
     /**
      * Lookup device index based on the driver and device name.
@@ -1820,7 +1819,7 @@
      *			Error will be thrown.
      */
     int lookupDev(const string &drv_name,
-		  const string &dev_name) const throw(Error);
+		  const string &dev_name) const;
 
     /**
      * Get string info for the specified capability.
@@ -1852,7 +1851,7 @@
      */
     void setFormat(int dev_id, 
 		   const MediaFormatVideo &format, 
-		   bool keep) throw(Error);
+		   bool keep);
 
     /**
      * Get the video format capability to the video device.
@@ -1869,7 +1868,7 @@
      * @param dev_id	The video device id.
      * @return keep	The video format.
      */
-    MediaFormatVideo getFormat(int dev_id) const throw(Error);
+    MediaFormatVideo getFormat(int dev_id) const;
 
     /**
      * This will configure video format capability to the video device.
@@ -1892,7 +1891,7 @@
      */
     void setInputScale(int dev_id, 
 		       const MediaSize &scale, 
-		       bool keep) throw(Error);
+		       bool keep);
 
     /**
      * Get the video input scale capability to the video device.
@@ -1909,7 +1908,7 @@
      * @param dev_id	The video device id.
      * @return keep	The video format.
      */
-    MediaSize getInputScale(int dev_id) const throw(Error);
+    MediaSize getInputScale(int dev_id) const;
 
     /**
      * This will configure fast switching to another video device.
@@ -1930,7 +1929,7 @@
      * @param keep	Specify whether the setting is to be kept for
      * 			future use.
      */
-    void setOutputWindowFlags(int dev_id, int flags, bool keep) throw(Error);
+    void setOutputWindowFlags(int dev_id, int flags, bool keep);
     
     /**
      * Get the window output flags capability to the video device.
@@ -1947,7 +1946,7 @@
      * @param dev_id	The video device id.
      * @return keep	The video format.
      */
-    int getOutputWindowFlags(int dev_id) throw(Error);
+    int getOutputWindowFlags(int dev_id);
 
     /**
      * This will configure fast switching to another video device.
@@ -1963,7 +1962,7 @@
      * @param param	The video switch param.
      */
     void switchDev(int dev_id,
-		   const VideoSwitchParam &param) throw(Error);
+		   const VideoSwitchParam &param);
 
     /**
      * Check whether the video capture device is currently active, i.e. if
@@ -1996,7 +1995,7 @@
      */
     void setCaptureOrient(pjmedia_vid_dev_index dev_id,
     			  pjmedia_orient orient,
-    			  bool keep=true) throw(Error);
+    			  bool keep=true);
 
 private:
     VideoDevInfoVector videoDevList;
Index: pjsip/include/pjsua2/persistent.hpp
===================================================================
--- pjsip/include/pjsua2/persistent.hpp	(revision 5883)
+++ pjsip/include/pjsua2/persistent.hpp	(working copy)
@@ -68,7 +68,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error) = 0;
+    virtual void readObject(const ContainerNode &node) = 0;
 
     /**
      * Write this object to a container node.
@@ -75,7 +75,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error) = 0;
+    virtual void writeObject(ContainerNode &node) const = 0;
 };
 
 
@@ -110,7 +110,7 @@
      *
      * @param filename	The file name.
      */
-    virtual void   	loadFile(const string &filename) throw(Error) = 0;
+    virtual void   	loadFile(const string &filename) = 0;
 
     /**
      * Load this document from string.
@@ -117,7 +117,7 @@
      *
      * @param input	The string.
      */
-    virtual void   	loadString(const string &input) throw(Error) = 0;
+    virtual void   	loadString(const string &input) = 0;
 
     /**
      * Write this document to a file.
@@ -124,7 +124,7 @@
      *
      * @param filename	The file name.
      */
-    virtual void   	saveFile(const string &filename) throw(Error) = 0;
+    virtual void   	saveFile(const string &filename) = 0;
 
     /**
      * Write this document to string.
@@ -131,7 +131,7 @@
      *
      * @return		The string document.
      */
-    virtual string 	saveString() throw(Error) = 0;
+    virtual string 	saveString() = 0;
 
     /**
      * Get the root container node for this document
@@ -160,7 +160,7 @@
      *
      * @return		The name of the next element .
      */
-    string		unreadName() const throw(Error);
+    string		unreadName() const;
 
     /**
      * Read an integer value from the document and return the value.
@@ -173,7 +173,7 @@
      *
      * @return		The value.
      */
-    int			readInt(const string &name="") const throw(Error);
+    int			readInt(const string &name="") const;
 
     /**
      * Read a float value from the document and return the value.
@@ -186,7 +186,7 @@
      *
      * @return		The value.
      */
-    float		readNumber(const string &name="") const throw(Error);
+    float		readNumber(const string &name="") const;
 
     /**
      * Read a boolean value from the container and return the value.
@@ -199,7 +199,7 @@
      *
      * @return		The value.
      */
-    bool		readBool(const string &name="") const throw(Error);
+    bool		readBool(const string &name="") const;
 
     /**
      * Read a string value from the container and return the value.
@@ -212,7 +212,7 @@
      *
      * @return		The value.
      */
-    string		readString(const string &name="") const throw(Error);
+    string		readString(const string &name="") const;
 
     /**
      * Read a string array from the container. This will throw Error
@@ -225,8 +225,7 @@
      *
      * @return		The value.
      */
-    StringVector	readStringVector(const string &name="") const
-					 throw(Error);
+    StringVector	readStringVector(const string &name="") const;
 
     /**
      * Read the specified object from the container. This is equal to
@@ -234,7 +233,7 @@
      *
      * @param obj	The object to read.
      */
-    void		readObject(PersistentObject &obj) const throw(Error);
+    void		readObject(PersistentObject &obj) const;
 
     /**
      * Read a container from the container. This will throw Error if the
@@ -247,8 +246,7 @@
      *
      * @return		Container object.
      */
-    ContainerNode	readContainer(const string &name="") const
-				      throw(Error);
+    ContainerNode	readContainer(const string &name="") const;
 
     /**
      * Read array container from the container. This will throw Error if the
@@ -261,8 +259,7 @@
      *
      * @return		Container object.
      */
-    ContainerNode	readArray(const string &name="") const
-				  throw(Error);
+    ContainerNode	readArray(const string &name="") const;
 
     /**
      * Write a number value to the container.
@@ -271,7 +268,7 @@
      * @param num	The value to be written.
      */
     void		writeNumber(const string &name,
-        		            float num) throw(Error);
+        		            float num);
 
     /**
      * Write a number value to the container.
@@ -280,7 +277,7 @@
      * @param num	The value to be written.
      */
     void		writeInt(const string &name,
-        		         int num) throw(Error);
+        		         int num);
 
     /**
      * Write a boolean value to the container.
@@ -289,7 +286,7 @@
      * @param value	The value to be written.
      */
     void		writeBool(const string &name,
-        		          bool value) throw(Error);
+        		          bool value);
 
     /**
      * Write a string value to the container.
@@ -298,7 +295,7 @@
      * @param value	The value to be written.
      */
     void		writeString(const string &name,
-        		            const string &value) throw(Error);
+        		            const string &value);
 
     /**
      * Write string vector to the container.
@@ -307,8 +304,7 @@
      * @param arr	The vector to be written.
      */
     void		writeStringVector(const string &name,
-        		                  const StringVector &arr)
-					  throw(Error);
+        		                  const StringVector &arr);
 
     /**
      * Write an object to the container. This is equal to calling
@@ -316,7 +312,7 @@
      *
      * @param obj	The object to be written
      */
-    void		writeObject(const PersistentObject &obj) throw(Error);
+    void		writeObject(const PersistentObject &obj);
 
     /**
      * Create and write an empty Object node that can be used as parent
@@ -326,8 +322,7 @@
      *
      * @return		A sub-container.
      */
-    ContainerNode 	writeNewContainer(const string &name)
-					  throw(Error);
+    ContainerNode 	writeNewContainer(const string &name);
 
     /**
      * Create and write an empty array node that can be used as parent
@@ -337,8 +332,7 @@
      *
      * @return		A sub-container.
      */
-    ContainerNode 	writeNewArray(const string &name)
-				      throw(Error);
+    ContainerNode 	writeNewArray(const string &name);
 };
 
 
@@ -422,7 +416,7 @@
     /**
      * Get the name of the next unread element.
      */
-    string		unreadName() const throw(Error);
+    string		unreadName() const;
 
     /**
      * Read an integer value from the document and return the value.
@@ -435,7 +429,7 @@
      *
      * @return		The value.
      */
-    int			readInt(const string &name="") const throw(Error);
+    int			readInt(const string &name="") const;
 
     /**
      * Read a number value from the document and return the value.
@@ -448,7 +442,7 @@
      *
      * @return		The value.
      */
-    float		readNumber(const string &name="") const throw(Error);
+    float		readNumber(const string &name="") const;
 
     /**
      * Read a boolean value from the container and return the value.
@@ -461,7 +455,7 @@
      *
      * @return		The value.
      */
-    bool		readBool(const string &name="") const throw(Error);
+    bool		readBool(const string &name="") const;
 
     /**
      * Read a string value from the container and return the value.
@@ -474,7 +468,7 @@
      *
      * @return		The value.
      */
-    string		readString(const string &name="") const throw(Error);
+    string		readString(const string &name="") const;
 
     /**
      * Read a string array from the container. This will throw Error
@@ -487,8 +481,7 @@
      *
      * @return		The value.
      */
-    StringVector	readStringVector(const string &name="") const
-					 throw(Error);
+    StringVector	readStringVector(const string &name="") const;
 
     /**
      * Read the specified object from the container. This is equal to
@@ -496,7 +489,7 @@
      *
      * @param obj	The object to read.
      */
-    void		readObject(PersistentObject &obj) const throw(Error);
+    void		readObject(PersistentObject &obj) const;
 
     /**
      * Read a container from the container. This will throw Error if the
@@ -509,8 +502,7 @@
      *
      * @return		Container object.
      */
-    ContainerNode	readContainer(const string &name="") const
-				      throw(Error);
+    ContainerNode	readContainer(const string &name="") const;
 
     /**
      * Read array container from the container. This will throw Error if the
@@ -523,8 +515,7 @@
      *
      * @return		Container object.
      */
-    ContainerNode	readArray(const string &name="") const
-				  throw(Error);
+    ContainerNode	readArray(const string &name="") const;
 
     /**
      * Write a number value to the container.
@@ -533,7 +524,7 @@
      * @param num	The value to be written.
      */
     void		writeNumber(const string &name,
-        		            float num) throw(Error);
+        		            float num);
 
     /**
      * Write a number value to the container.
@@ -542,7 +533,7 @@
      * @param num	The value to be written.
      */
     void		writeInt(const string &name,
-        		         int num) throw(Error);
+        		         int num);
 
     /**
      * Write a boolean value to the container.
@@ -551,7 +542,7 @@
      * @param value	The value to be written.
      */
     void		writeBool(const string &name,
-        		          bool value) throw(Error);
+        		          bool value);
 
     /**
      * Write a string value to the container.
@@ -560,7 +551,7 @@
      * @param value	The value to be written.
      */
     void		writeString(const string &name,
-        		            const string &value) throw(Error);
+        		            const string &value);
 
     /**
      * Write string vector to the container.
@@ -569,8 +560,7 @@
      * @param arr	The vector to be written.
      */
     void		writeStringVector(const string &name,
-        		                  const StringVector &arr)
-					  throw(Error);
+        		                  const StringVector &arr);
 
     /**
      * Write an object to the container. This is equal to calling
@@ -578,7 +568,7 @@
      *
      * @param obj	The object to be written
      */
-    void		writeObject(const PersistentObject &obj) throw(Error);
+    void		writeObject(const PersistentObject &obj);
 
     /**
      * Create and write an empty Object node that can be used as parent
@@ -588,8 +578,7 @@
      *
      * @return		A sub-container.
      */
-    ContainerNode 	writeNewContainer(const string &name)
-					  throw(Error);
+    ContainerNode 	writeNewContainer(const string &name);
 
     /**
      * Create and write an empty array node that can be used as parent
@@ -599,8 +588,7 @@
      *
      * @return		A sub-container.
      */
-    ContainerNode 	writeNewArray(const string &name)
-				      throw(Error);
+    ContainerNode 	writeNewArray(const string &name);
 
 public:
     /* internal data */
@@ -617,48 +605,35 @@
 struct container_node_op
 {
     bool		(*hasUnread)(const ContainerNode*);
-    string		(*unreadName)(const ContainerNode*)
-				      throw(Error);
+    string		(*unreadName)(const ContainerNode*);
     float		(*readNumber)(const ContainerNode*,
-				      const string&)
-				      throw(Error);
+				      const string&);
     bool		(*readBool)(const ContainerNode*,
-				    const string&)
-				    throw(Error);
+				    const string&);
     string		(*readString)(const ContainerNode*,
-				      const string&)
-				      throw(Error);
+				      const string&);
     StringVector	(*readStringVector)(const ContainerNode*,
-					    const string&)
-					    throw(Error);
+					    const string&);
     ContainerNode	(*readContainer)(const ContainerNode*,
-					 const string &)
-					 throw(Error);
+					 const string &);
     ContainerNode	(*readArray)(const ContainerNode*,
-				     const string &)
-				     throw(Error);
+				     const string &);
     void		(*writeNumber)(ContainerNode*,
 				       const string &name,
-        		               float num)
-        		               throw(Error);
+        		               float num);
     void		(*writeBool)(ContainerNode*,
 				     const string &name,
-        			     bool value)
-        			     throw(Error);
+        			     bool value);
     void		(*writeString)(ContainerNode*,
 				       const string &name,
-        			       const string &value)
-        			       throw(Error);
+        			       const string &value);
     void		(*writeStringVector)(ContainerNode*,
 					     const string &name,
-        				     const StringVector &value)
-					     throw(Error);
+        				     const StringVector &value);
     ContainerNode 	(*writeNewContainer)(ContainerNode*,
-					     const string &name)
-					     throw(Error);
+					     const string &name);
     ContainerNode 	(*writeNewArray)(ContainerNode*,
-				         const string &name)
-					 throw(Error);
+				         const string &name);
 };
 
 /*
Index: pjsip/include/pjsua2/presence.hpp
===================================================================
--- pjsip/include/pjsua2/presence.hpp	(revision 5883)
+++ pjsip/include/pjsua2/presence.hpp	(working copy)
@@ -100,7 +100,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -107,7 +107,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 
@@ -210,7 +210,7 @@
      * @param acc		The account for this buddy.
      * @param cfg		The buddy config.
      */
-    void create(Account &acc, const BuddyConfig &cfg) throw(Error);
+    void create(Account &acc, const BuddyConfig &cfg);
     
     /**
      * Check if this buddy is valid.
@@ -224,7 +224,7 @@
      *
      * @return			Buddy info.
      */
-    BuddyInfo getInfo() const throw(Error);
+    BuddyInfo getInfo() const;
 
     /**
      * Enable/disable buddy's presence monitoring. Once buddy's presence is
@@ -234,7 +234,7 @@
      * @param subscribe		Specify true to activate presence
      *				subscription.
      */
-    void subscribePresence(bool subscribe) throw(Error);
+    void subscribePresence(bool subscribe);
     
     /**
      * Update the presence information for the buddy. Although the library
@@ -252,7 +252,7 @@
      * application will be notified about the buddy's presence status in the
      * \a onBuddyState() callback.
      */
-     void updatePresence(void) throw(Error);
+     void updatePresence(void);
      
     /**
      * Send instant messaging outside dialog, using this buddy's specified
@@ -260,7 +260,7 @@
      *
      * @param prm	Sending instant message parameter.
      */
-    void sendInstantMessage(const SendInstantMessageParam &prm) throw(Error);
+    void sendInstantMessage(const SendInstantMessageParam &prm);
 
     /**
      * Send typing indication outside dialog.
@@ -267,8 +267,7 @@
      *
      * @param prm	Sending instant message parameter.
      */
-    void sendTypingIndication(const SendTypingIndicationParam &prm)
-	 throw(Error);
+    void sendTypingIndication(const SendTypingIndicationParam &prm);
 
 public:
     /*
Index: pjsip/include/pjsua2/siptypes.hpp
===================================================================
--- pjsip/include/pjsua2/siptypes.hpp	(revision 5883)
+++ pjsip/include/pjsua2/siptypes.hpp	(working copy)
@@ -104,7 +104,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -111,7 +111,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 
@@ -287,7 +287,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -294,7 +294,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 
@@ -384,7 +384,7 @@
      *
      * @param node		Container to read values from.
      */
-    virtual void readObject(const ContainerNode &node) throw(Error);
+    virtual void readObject(const ContainerNode &node);
 
     /**
      * Write this object to a container node.
@@ -391,7 +391,7 @@
      *
      * @param node		Container to write values to.
      */
-    virtual void writeObject(ContainerNode &node) const throw(Error);
+    virtual void writeObject(ContainerNode &node) const;
 };
 
 /**
@@ -744,7 +744,7 @@
     /**
      * Initiaize from PJSIP header.
      */
-    void fromPj(const pjsip_hdr *) throw(Error);
+    void fromPj(const pjsip_hdr *);
 
     /**
      * Convert to PJSIP header.
@@ -784,7 +784,7 @@
     /**
      * Initiaize from PJSIP's pjsip_multipart_part.
      */
-    void fromPj(const pjsip_multipart_part &prm) throw(Error);
+    void fromPj(const pjsip_multipart_part &prm);
 
     /**
      * Convert to PJSIP's pjsip_multipart_part.
@@ -859,7 +859,7 @@
     /**
      * Initiaize from PJSUA's pjsua_msg_data.
      */
-    void fromPj(const pjsua_msg_data &prm) throw(Error);
+    void fromPj(const pjsua_msg_data &prm);
 
     /**
      * Convert to PJSUA's pjsua_msg_data.
@@ -932,20 +932,20 @@
 //! @cond Doxygen_Suppress
 void readIntVector( ContainerNode &node,
                     const string &array_name,
-                    IntVector &v) throw(Error);
+                    IntVector &v);
 void writeIntVector(ContainerNode &node,
                     const string &array_name,
-                    const IntVector &v) throw(Error);
+                    const IntVector &v);
 void readQosParams( ContainerNode &node,
-                    pj_qos_params &qos) throw(Error);
+                    pj_qos_params &qos);
 void writeQosParams( ContainerNode &node,
-                     const pj_qos_params &qos) throw(Error);
+                     const pj_qos_params &qos);
 void readSipHeaders( const ContainerNode &node,
                      const string &array_name,
-                     SipHeaderVector &headers) throw(Error);
+                     SipHeaderVector &headers);
 void writeSipHeaders(ContainerNode &node,
                      const string &array_name,
-                     const SipHeaderVector &headers) throw(Error);
+                     const SipHeaderVector &headers);
 //! @endcond
 #endif // SWIG
 
Index: pjsip/src/pjsua2/account.cpp
===================================================================
--- pjsip/src/pjsua2/account.cpp	(revision 5883)
+++ pjsip/src/pjsua2/account.cpp	(working copy)
@@ -84,7 +84,7 @@
     return setting;
 }
 
-void RtcpFbConfig::readObject(const ContainerNode &node) throw(Error)
+void RtcpFbConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("RtcpFbConfig");
     NODE_READ_BOOL	(this_node, dontUseAvpf);
@@ -101,7 +101,7 @@
     }
 }
 
-void RtcpFbConfig::writeObject(ContainerNode &node) const throw(Error)
+void RtcpFbConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("RtcpFbConfig");
     NODE_WRITE_BOOL	(this_node, dontUseAvpf);
@@ -179,7 +179,7 @@
     return opt;
 }
 
-void SrtpOpt::readObject(const ContainerNode &node) throw(Error)
+void SrtpOpt::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("SrtpOpt");
 
@@ -202,7 +202,7 @@
     }
 }
 
-void SrtpOpt::writeObject(ContainerNode &node) const throw(Error)
+void SrtpOpt::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("SrtpOpt");
 
@@ -221,7 +221,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountRegConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountRegConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountRegConfig");
 
@@ -240,7 +240,7 @@
     readSipHeaders(this_node, "headers", headers);
 }
 
-void AccountRegConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountRegConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountRegConfig");
 
@@ -261,7 +261,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountSipConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountSipConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountSipConfig");
 
@@ -282,7 +282,7 @@
     }
 }
 
-void AccountSipConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountSipConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountSipConfig");
 
@@ -302,7 +302,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountCallConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountCallConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountCallConfig");
 
@@ -313,7 +313,7 @@
     NODE_READ_UNSIGNED( this_node, timerSessExpiresSec);
 }
 
-void AccountCallConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountCallConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountCallConfig");
 
@@ -326,7 +326,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountPresConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountPresConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountPresConfig");
 
@@ -338,7 +338,7 @@
     readSipHeaders(this_node, "headers", headers);
 }
 
-void AccountPresConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountPresConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountPresConfig");
 
@@ -352,7 +352,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountMwiConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountMwiConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountMwiConfig");
 
@@ -360,7 +360,7 @@
     NODE_READ_UNSIGNED( this_node, expirationSec);
 }
 
-void AccountMwiConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountMwiConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountMwiConfig");
 
@@ -370,7 +370,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountNatConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountNatConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountNatConfig");
 
@@ -402,7 +402,7 @@
     NODE_READ_INT     ( this_node, contactUseSrcPort);
 }
 
-void AccountNatConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountNatConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountNatConfig");
 
@@ -436,7 +436,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountMediaConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountMediaConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountMediaConfig");
 
@@ -450,7 +450,7 @@
     NODE_READ_BOOL    ( this_node, rtcpMuxEnabled);
 }
 
-void AccountMediaConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountMediaConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountMediaConfig");
 
@@ -466,7 +466,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountVideoConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountVideoConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountVideoConfig");
 
@@ -481,7 +481,7 @@
     NODE_READ_UNSIGNED( this_node, startKeyframeInterval);
 }
 
-void AccountVideoConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountVideoConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountVideoConfig");
 
@@ -497,7 +497,7 @@
 }
 ///////////////////////////////////////////////////////////////////////////////
 
-void AccountIpChangeConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountIpChangeConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountIpChangeConfig");
 
@@ -506,7 +506,7 @@
     NODE_READ_UNSIGNED( this_node, reinviteFlags);
 }
 
-void AccountIpChangeConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountIpChangeConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountIpChangeConfig");
 
@@ -847,7 +847,7 @@
     ipChangeConfig.reinviteFlags = prm.ip_change_cfg.reinvite_flags;
 }
 
-void AccountConfig::readObject(const ContainerNode &node) throw(Error)
+void AccountConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AccountConfig");
 
@@ -863,7 +863,7 @@
     NODE_READ_OBJ     ( this_node, videoConfig);
 }
 
-void AccountConfig::writeObject(ContainerNode &node) const throw(Error)
+void AccountConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AccountConfig");
 
@@ -914,7 +914,7 @@
 }
 
 void Account::create(const AccountConfig &acc_cfg,
-                     bool make_default) throw(Error)
+                     bool make_default)
 {
     pjsua_acc_config pj_acc_cfg;
     
@@ -940,7 +940,7 @@
     }
 }
 
-void Account::modify(const AccountConfig &acc_cfg) throw(Error)
+void Account::modify(const AccountConfig &acc_cfg)
 {
     pjsua_acc_config pj_acc_cfg;
     
@@ -954,7 +954,7 @@
     return pjsua_acc_is_valid(id) != 0;
 }
 
-void Account::setDefault() throw(Error)
+void Account::setDefault()
 {
     PJSUA2_CHECK_EXPR( pjsua_acc_set_default(id) );
 }
@@ -974,7 +974,7 @@
     return (Account*)pjsua_acc_get_user_data(acc_id);
 }
 
-AccountInfo Account::getInfo() const throw(Error)
+AccountInfo Account::getInfo() const
 {
     pjsua_acc_info pj_ai;
     AccountInfo ai;
@@ -984,13 +984,13 @@
     return ai;
 }
 
-void Account::setRegistration(bool renew) throw(Error)
+void Account::setRegistration(bool renew)
 {
     PJSUA2_CHECK_EXPR( pjsua_acc_set_registration(id, renew) );
 }
 
 void
-Account::setOnlineStatus(const PresenceStatus &pres_st) throw(Error)
+Account::setOnlineStatus(const PresenceStatus &pres_st)
 {
     pjrpid_element pj_rpid;
 
@@ -1005,12 +1005,12 @@
 			    &pj_rpid) );
 }
 
-void Account::setTransport(TransportId tp_id) throw(Error)
+void Account::setTransport(TransportId tp_id)
 {
     PJSUA2_CHECK_EXPR( pjsua_acc_set_transport(id, tp_id) );
 }
 
-void Account::presNotify(const PresNotifyParam &prm) throw(Error)
+void Account::presNotify(const PresNotifyParam &prm)
 {
     pj_str_t pj_state_str   = str2Pj(prm.stateStr);
     pj_str_t pj_reason	    = str2Pj(prm.reason);
@@ -1023,13 +1023,12 @@
 					 &msg_data) );
 }
 
-const BuddyVector& Account::enumBuddies() const throw(Error)
+const BuddyVector& Account::enumBuddies() const
 {
     return buddyList;
 }
 
 Buddy* Account::findBuddy(string uri, FindBuddyMatch *buddy_match) const
-		throw(Error)
 {
     if (!buddy_match) {
 	static FindBuddyMatch def_bm;
Index: pjsip/src/pjsua2/call.cpp
===================================================================
--- pjsip/src/pjsua2/call.cpp	(revision 5883)
+++ pjsip/src/pjsua2/call.cpp	(working copy)
@@ -476,7 +476,7 @@
     }
 }
 
-CallInfo Call::getInfo() const throw(Error)
+CallInfo Call::getInfo() const
 {
     pjsua_call_info pj_ci;
     CallInfo ci;
@@ -547,7 +547,7 @@
     return userData;
 }
 
-pj_stun_nat_type Call::getRemNatType() throw(Error)
+pj_stun_nat_type Call::getRemNatType()
 {
     pj_stun_nat_type nat;
     
@@ -556,7 +556,7 @@
     return nat;
 }
 
-void Call::makeCall(const string &dst_uri, const CallOpParam &prm) throw(Error)
+void Call::makeCall(const string &dst_uri, const CallOpParam &prm)
 {
     pj_str_t pj_dst_uri = str2Pj(dst_uri);
     call_param param(prm.txOption, prm.opt, prm.reason);
@@ -566,7 +566,7 @@
                                             param.p_msg_data, &id) );
 }
 
-void Call::answer(const CallOpParam &prm) throw(Error)
+void Call::answer(const CallOpParam &prm)
 {
     call_param param(prm.txOption, prm.opt, prm.reason,
     		     sdp_pool, prm.sdp.wholeSdp);
@@ -583,7 +583,7 @@
     }
 }
 
-void Call::hangup(const CallOpParam &prm) throw(Error)
+void Call::hangup(const CallOpParam &prm)
 {
     call_param param(prm.txOption, prm.opt, prm.reason);
     
@@ -591,7 +591,7 @@
                                          param.p_msg_data) );
 }
 
-void Call::setHold(const CallOpParam &prm) throw(Error)
+void Call::setHold(const CallOpParam &prm)
 {
     call_param param(prm.txOption, prm.opt, prm.reason);
     
@@ -598,7 +598,7 @@
     PJSUA2_CHECK_EXPR( pjsua_call_set_hold2(id, prm.options, param.p_msg_data));
 }
 
-void Call::reinvite(const CallOpParam &prm) throw(Error)
+void Call::reinvite(const CallOpParam &prm)
 {
     call_param param(prm.txOption, prm.opt, prm.reason);
 
@@ -605,7 +605,7 @@
     PJSUA2_CHECK_EXPR( pjsua_call_reinvite2(id, param.p_opt, param.p_msg_data));
 }
 
-void Call::update(const CallOpParam &prm) throw(Error)
+void Call::update(const CallOpParam &prm)
 {
     call_param param(prm.txOption, prm.opt, prm.reason);
     
@@ -612,7 +612,7 @@
     PJSUA2_CHECK_EXPR( pjsua_call_update2(id, param.p_opt, param.p_msg_data) );
 }
 
-void Call::xfer(const string &dest, const CallOpParam &prm) throw(Error)
+void Call::xfer(const string &dest, const CallOpParam &prm)
 {
     call_param param(prm.txOption);
     pj_str_t pj_dest = str2Pj(dest);
@@ -621,7 +621,7 @@
 }
 
 void Call::xferReplaces(const Call& dest_call,
-                  const CallOpParam &prm) throw(Error)
+                  const CallOpParam &prm)
 {
     call_param param(prm.txOption);
     
@@ -629,12 +629,12 @@
                                                prm.options, param.p_msg_data) );
 }
 
-void Call::processRedirect(pjsip_redirect_op cmd) throw(Error)
+void Call::processRedirect(pjsip_redirect_op cmd)
 {
     PJSUA2_CHECK_EXPR(pjsua_call_process_redirect(id, cmd));
 }
 
-void Call::dialDtmf(const string &digits) throw(Error)
+void Call::dialDtmf(const string &digits)
 {
     pj_str_t pj_digits = str2Pj(digits);
     
@@ -641,7 +641,7 @@
     PJSUA2_CHECK_EXPR(pjsua_call_dial_dtmf(id, &pj_digits));
 }
 
-void Call::sendDtmf(const CallSendDtmfParam &param) throw (Error)
+void Call::sendDtmf(const CallSendDtmfParam &param)
 {
     pjsua_call_send_dtmf_param pj_param = param.toPj();
     
@@ -650,7 +650,6 @@
 
 
 void Call::sendInstantMessage(const SendInstantMessageParam& prm)
-    throw(Error)
 {
     pj_str_t mime_type = str2Pj(prm.contentType);
     pj_str_t content = str2Pj(prm.content);
@@ -661,7 +660,6 @@
 }
 
 void Call::sendTypingIndication(const SendTypingIndicationParam &prm)
-    throw(Error)
 {
     call_param param(prm.txOption);
     
@@ -671,7 +669,7 @@
                                                  param.p_msg_data) );
 }
 
-void Call::sendRequest(const CallSendRequestParam &prm) throw(Error)
+void Call::sendRequest(const CallSendRequestParam &prm)
 {
     pj_str_t method = str2Pj(prm.method);
     call_param param(prm.txOption);
@@ -679,7 +677,7 @@
     PJSUA2_CHECK_EXPR(pjsua_call_send_request(id, &method, param.p_msg_data) );
 }
 
-string Call::dump(bool with_media, const string indent) throw(Error)
+string Call::dump(bool with_media, const string indent)
 {
 #if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0)
     char buffer[1024 * 10];
@@ -715,7 +713,7 @@
 }
 
 void Call::vidSetStream(pjsua_call_vid_strm_op op,
-                        const CallVidSetStreamParam &param) throw(Error)
+                        const CallVidSetStreamParam &param)
 {
 #if PJSUA_HAS_VIDEO
     pjsua_call_vid_strm_op_param prm;
@@ -731,7 +729,7 @@
 #endif
 }
 
-StreamInfo Call::getStreamInfo(unsigned med_idx) const throw(Error)
+StreamInfo Call::getStreamInfo(unsigned med_idx) const
 {
     pjsua_stream_info pj_si;
     StreamInfo si;
@@ -741,7 +739,7 @@
     return si;
 }
 
-StreamStat Call::getStreamStat(unsigned med_idx) const throw(Error)
+StreamStat Call::getStreamStat(unsigned med_idx) const
 {
     pjsua_stream_stat pj_ss;
     StreamStat ss;
@@ -752,7 +750,6 @@
 }
 
 MediaTransportInfo Call::getMedTransportInfo(unsigned med_idx) const
-    throw(Error)
 {
     pjmedia_transport_info pj_mti;
     MediaTransportInfo mti;
Index: pjsip/src/pjsua2/endpoint.cpp
===================================================================
--- pjsip/src/pjsua2/endpoint.cpp	(revision 5883)
+++ pjsip/src/pjsua2/endpoint.cpp	(working copy)
@@ -223,7 +223,7 @@
     return pua_cfg;
 }
 
-void UaConfig::readObject(const ContainerNode &node) throw(Error)
+void UaConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("UaConfig");
 
@@ -239,7 +239,7 @@
     NODE_READ_BOOL    ( this_node, mwiUnsolicitedEnabled);
 }
 
-void UaConfig::writeObject(ContainerNode &node) const throw(Error)
+void UaConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("UaConfig");
 
@@ -292,7 +292,7 @@
     return lc;
 }
 
-void LogConfig::readObject(const ContainerNode &node) throw(Error)
+void LogConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("LogConfig");
 
@@ -304,7 +304,7 @@
     NODE_READ_UNSIGNED( this_node, fileFlags);
 }
 
-void LogConfig::writeObject(ContainerNode &node) const throw(Error)
+void LogConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("LogConfig");
 
@@ -386,7 +386,7 @@
     return mcfg;
 }
 
-void MediaConfig::readObject(const ContainerNode &node) throw(Error)
+void MediaConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("MediaConfig");
 
@@ -415,7 +415,7 @@
     NODE_READ_BOOL    ( this_node, vidPreviewEnableNative);
 }
 
-void MediaConfig::writeObject(ContainerNode &node) const throw(Error)
+void MediaConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("MediaConfig");
 
@@ -446,7 +446,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void EpConfig::readObject(const ContainerNode &node) throw(Error)
+void EpConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("EpConfig");
     NODE_READ_OBJ( this_node, uaConfig);
@@ -454,7 +454,7 @@
     NODE_READ_OBJ( this_node, medConfig);
 }
 
-void EpConfig::writeObject(ContainerNode &node) const throw(Error)
+void EpConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("EpConfig");
     NODE_WRITE_OBJ( this_node, uaConfig);
@@ -488,7 +488,7 @@
     instance_ = this;
 }
 
-Endpoint& Endpoint::instance() throw(Error)
+Endpoint& Endpoint::instance()
 {
     if (!instance_) {
 	PJSUA2_RAISE_ERROR(PJ_ENOTFOUND);
@@ -1569,7 +1569,7 @@
     return ver;
 }
 
-void Endpoint::libCreate() throw(Error)
+void Endpoint::libCreate()
 {
     PJSUA2_CHECK_EXPR( pjsua_create() );
     mainThread = pj_thread_this();
@@ -1583,7 +1583,7 @@
     return pjsua_get_state();
 }
 
-void Endpoint::libInit(const EpConfig &prmEpConfig) throw(Error)
+void Endpoint::libInit(const EpConfig &prmEpConfig)
 {
     pjsua_config ua_cfg;
     pjsua_logging_config log_cfg;
@@ -1663,12 +1663,12 @@
     }
 }
 
-void Endpoint::libStart() throw(Error)
+void Endpoint::libStart()
 {
     PJSUA2_CHECK_EXPR(pjsua_start());
 }
 
-void Endpoint::libRegisterThread(const string &name) throw(Error)
+void Endpoint::libRegisterThread(const string &name)
 {
     pj_thread_t *thread;
     pj_thread_desc *desc;
@@ -1711,7 +1711,7 @@
     return pjsua_handle_events(msec_timeout);
 }
 
-void Endpoint::libDestroy(unsigned flags) throw(Error)
+void Endpoint::libDestroy(unsigned flags)
 {
     pj_status_t status;
 
@@ -1778,7 +1778,7 @@
 }
 
 Token Endpoint::utilTimerSchedule(unsigned prmMsecDelay,
-                                  Token prmUserData) throw (Error)
+                                  Token prmUserData)
 {
     UserTimer *ut;
     pj_time_val delay;
@@ -1820,7 +1820,7 @@
     delete ut;
 }
 
-IntVector Endpoint::utilSslGetAvailableCiphers() throw (Error)
+IntVector Endpoint::utilSslGetAvailableCiphers()
 {
 #if PJ_HAS_SSL_SOCK
     pj_ssl_cipher ciphers[PJ_SSL_SOCK_MAX_CIPHERS];
@@ -1838,12 +1838,12 @@
 /*
  * Endpoint NAT operations
  */
-void Endpoint::natDetectType(void) throw(Error)
+void Endpoint::natDetectType(void)
 {
     PJSUA2_CHECK_EXPR( pjsua_detect_nat_type() );
 }
 
-pj_stun_nat_type Endpoint::natGetType() throw(Error)
+pj_stun_nat_type Endpoint::natGetType()
 {
     pj_stun_nat_type type;
 
@@ -1853,7 +1853,7 @@
 }
 
 void Endpoint::natUpdateStunServers(const StringVector &servers,
-				    bool wait) throw(Error)
+				    bool wait)
 {
     pj_str_t srv[MAX_STUN_SERVERS];
     unsigned i, count = 0;
@@ -1869,7 +1869,7 @@
 
 void Endpoint::natCheckStunServers(const StringVector &servers,
 				   bool wait,
-				   Token token) throw(Error)
+				   Token token)
 {
     pj_str_t srv[MAX_STUN_SERVERS];
     unsigned i, count = 0;
@@ -1885,7 +1885,7 @@
 }
 
 void Endpoint::natCancelCheckStunServers(Token token,
-                                         bool notify_cb) throw(Error)
+                                         bool notify_cb)
 {
     PJSUA2_CHECK_EXPR( pjsua_cancel_stun_resolution(token, notify_cb) );
 }
@@ -1895,7 +1895,7 @@
  * Transport API
  */
 TransportId Endpoint::transportCreate(pjsip_transport_type_e type,
-                                      const TransportConfig &cfg) throw(Error)
+                                      const TransportConfig &cfg)
 {
     pjsua_transport_config tcfg;
     pjsua_transport_id tid;
@@ -1907,7 +1907,7 @@
     return tid;
 }
 
-IntVector Endpoint::transportEnum() throw(Error)
+IntVector Endpoint::transportEnum()
 {
     pjsua_transport_id tids[32];
     unsigned count = PJ_ARRAY_SIZE(tids);
@@ -1917,7 +1917,7 @@
     return IntVector(tids, tids+count);
 }
 
-TransportInfo Endpoint::transportGetInfo(TransportId id) throw(Error)
+TransportInfo Endpoint::transportGetInfo(TransportId id)
 {
     pjsua_transport_info pj_tinfo;
     TransportInfo tinfo;
@@ -1928,17 +1928,17 @@
     return tinfo;
 }
 
-void Endpoint::transportSetEnable(TransportId id, bool enabled) throw(Error)
+void Endpoint::transportSetEnable(TransportId id, bool enabled)
 {
     PJSUA2_CHECK_EXPR( pjsua_transport_set_enable(id, enabled) );
 }
 
-void Endpoint::transportClose(TransportId id) throw(Error)
+void Endpoint::transportClose(TransportId id)
 {
     PJSUA2_CHECK_EXPR( pjsua_transport_close(id, PJ_FALSE) );
 }
 
-void Endpoint::transportShutdown(TransportHandle tp) throw(Error)
+void Endpoint::transportShutdown(TransportHandle tp)
 {
     PJSUA2_CHECK_EXPR( pjsip_transport_shutdown((pjsip_transport *)tp) );
 }
@@ -1967,7 +1967,7 @@
     return pjsua_conf_get_active_ports();
 }
 
-const AudioMediaVector &Endpoint::mediaEnumPorts() const throw(Error)
+const AudioMediaVector &Endpoint::mediaEnumPorts() const
 {
     return mediaList;
 }
@@ -2013,7 +2013,7 @@
 /*
  * Codec operations.
  */
-const CodecInfoVector &Endpoint::codecEnum() throw(Error)
+const CodecInfoVector &Endpoint::codecEnum()
 {
     pjsua_codec_info pj_codec[MAX_CODEC_NUM];
     unsigned count = MAX_CODEC_NUM;
@@ -2025,13 +2025,13 @@
 }
 
 void Endpoint::codecSetPriority(const string &codec_id,
-			        pj_uint8_t priority) throw(Error)
+			        pj_uint8_t priority)
 {
     pj_str_t codec_str = str2Pj(codec_id);
     PJSUA2_CHECK_EXPR( pjsua_codec_set_priority(&codec_str, priority) );
 }
 
-CodecParam Endpoint::codecGetParam(const string &codec_id) const throw(Error)
+CodecParam Endpoint::codecGetParam(const string &codec_id) const
 {
     CodecParam param;
     pjmedia_codec_param pj_param;
@@ -2044,7 +2044,7 @@
 }
 
 void Endpoint::codecSetParam(const string &codec_id,
-			     const CodecParam param) throw(Error)
+			     const CodecParam param)
 {
     pj_str_t codec_str = str2Pj(codec_id);
     pjmedia_codec_param pj_param = param.toPj();
@@ -2074,7 +2074,7 @@
     pj_leave_critical_section();
 }
 
-const CodecInfoVector &Endpoint::videoCodecEnum() throw(Error)
+const CodecInfoVector &Endpoint::videoCodecEnum()
 {
 #if PJSUA_HAS_VIDEO
     pjsua_codec_info pj_codec[MAX_CODEC_NUM];
@@ -2088,7 +2088,7 @@
 }
 
 void Endpoint::videoCodecSetPriority(const string &codec_id,
-				     pj_uint8_t priority) throw(Error)
+				     pj_uint8_t priority)
 {
 #if PJSUA_HAS_VIDEO
     pj_str_t codec_str = str2Pj(codec_id);
@@ -2100,7 +2100,6 @@
 }
 
 VidCodecParam Endpoint::getVideoCodecParam(const string &codec_id) const 
-								   throw(Error)
 {    
     VidCodecParam codec_param;
 #if PJSUA_HAS_VIDEO
@@ -2116,7 +2115,7 @@
 }
 
 void Endpoint::setVideoCodecParam(const string &codec_id,
-				  const VidCodecParam &param) throw(Error)
+				  const VidCodecParam &param)
 {
 #if PJSUA_HAS_VIDEO
     pj_str_t codec_str = str2Pj(codec_id);
@@ -2129,7 +2128,7 @@
 #endif
 }
 
-void Endpoint::resetVideoCodecParam(const string &codec_id) throw(Error)
+void Endpoint::resetVideoCodecParam(const string &codec_id)
 {
 #if PJSUA_HAS_VIDEO
     pj_str_t codec_str = str2Pj(codec_id);    
@@ -2143,7 +2142,7 @@
 /*
  * Enumerate all SRTP crypto-suite names.
  */
-StringVector Endpoint::srtpCryptoEnum() throw(Error)
+StringVector Endpoint::srtpCryptoEnum()
 {
     unsigned cnt = PJMEDIA_SRTP_MAX_CRYPTOS;
     pjmedia_srtp_crypto cryptos[PJMEDIA_SRTP_MAX_CRYPTOS];
@@ -2157,7 +2156,7 @@
     return result;
 }
 
-void Endpoint::handleIpChange(const IpChangeParam &param) throw(Error)
+void Endpoint::handleIpChange(const IpChangeParam &param)
 {
     pjsua_ip_change_param ip_change_param = param.toPj();
     PJSUA2_CHECK_EXPR(pjsua_handle_ip_change(&ip_change_param));
Index: pjsip/src/pjsua2/json.cpp
===================================================================
--- pjsip/src/pjsua2/json.cpp	(revision 5883)
+++ pjsip/src/pjsua2/json.cpp	(working copy)
@@ -28,48 +28,35 @@
 
 /* Json node operations */
 static bool		jsonNode_hasUnread(const ContainerNode*);
-static string		jsonNode_unreadName(const ContainerNode*n)
-				            throw(Error);
+static string		jsonNode_unreadName(const ContainerNode*n);
 static float		jsonNode_readNumber(const ContainerNode*,
-            		                    const string&)
-					      throw(Error);
+            		                    const string&);
 static bool		jsonNode_readBool(const ContainerNode*,
-           		                  const string&)
-					  throw(Error);
+           		                  const string&);
 static string		jsonNode_readString(const ContainerNode*,
-             		                    const string&)
-					    throw(Error);
+             		                    const string&);
 static StringVector	jsonNode_readStringVector(const ContainerNode*,
-                   	                          const string&)
-						  throw(Error);
+                   	                          const string&);
 static ContainerNode	jsonNode_readContainer(const ContainerNode*,
-                    	                       const string &)
-					       throw(Error);
+                    	                       const string &);
 static ContainerNode	jsonNode_readArray(const ContainerNode*,
-                    	                   const string &)
-					   throw(Error);
+                    	                   const string &);
 static void		jsonNode_writeNumber(ContainerNode*,
            		                     const string &name,
-           		                     float num)
-           		                     throw(Error);
+           		                     float num);
 static void		jsonNode_writeBool(ContainerNode*,
            		                   const string &name,
-           		                   bool value)
-					   throw(Error);
+           		                   bool value);
 static void		jsonNode_writeString(ContainerNode*,
            		                     const string &name,
-           		                     const string &value)
-					     throw(Error);
+           		                     const string &value);
 static void		jsonNode_writeStringVector(ContainerNode*,
            		                           const string &name,
-           		                           const StringVector &value)
-					           throw(Error);
+           		                           const StringVector &value);
 static ContainerNode 	jsonNode_writeNewContainer(ContainerNode*,
-                     	                           const string &name)
-					           throw(Error);
+                     	                           const string &name);
 static ContainerNode 	jsonNode_writeNewArray(ContainerNode*,
-                     	                       const string &name)
-					       throw(Error);
+                     	                       const string &name);
 
 static container_node_op json_op =
 {
@@ -114,7 +101,7 @@
     rootNode.data.data2 = root->value.children.next;
 }
 
-void JsonDocument::loadFile(const string &filename) throw(Error)
+void JsonDocument::loadFile(const string &filename)
 {
     if (root)
 	PJSUA2_RAISE_ERROR3(PJ_EINVALIDOP, "JsonDocument.loadString()",
@@ -174,7 +161,7 @@
 	PJSUA2_RAISE_ERROR(status);
 }
 
-void JsonDocument::loadString(const string &input) throw(Error)
+void JsonDocument::loadString(const string &input)
 {
     if (root)
 	PJSUA2_RAISE_ERROR3(PJ_EINVALIDOP, "JsonDocument.loadString()",
@@ -214,7 +201,7 @@
     return pj_file_write(sd->fd, s, &ssize);
 }
 
-void JsonDocument::saveFile(const string &filename) throw(Error)
+void JsonDocument::saveFile(const string &filename)
 {
     struct save_file_data sd;
     pj_status_t status;
@@ -247,7 +234,7 @@
     return PJ_SUCCESS;
 }
 
-string JsonDocument::saveString() throw(Error)
+string JsonDocument::saveString()
 {
     struct save_string_data sd;
     pj_status_t status;
@@ -333,7 +320,6 @@
 }
 
 static string jsonNode_unreadName(const ContainerNode *node)
-				  throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "unreadName()", "", PJ_JSON_VAL_NULL);
@@ -342,7 +328,6 @@
 
 static float jsonNode_readNumber(const ContainerNode *node,
             		         const string &name)
-				 throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "readNumber()", name, PJ_JSON_VAL_NUMBER);
@@ -352,7 +337,6 @@
 
 static bool jsonNode_readBool(const ContainerNode *node,
 			      const string &name)
-			      throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "readBool()", name, PJ_JSON_VAL_BOOL);
@@ -362,7 +346,6 @@
 
 static string jsonNode_readString(const ContainerNode *node,
 				  const string &name)
-				  throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "readString()", name, PJ_JSON_VAL_STRING);
@@ -372,7 +355,6 @@
 
 static StringVector jsonNode_readStringVector(const ContainerNode *node,
                    	                      const string &name)
-					      throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "readStringVector()", name, PJ_JSON_VAL_ARRAY);
@@ -398,7 +380,6 @@
 
 static ContainerNode jsonNode_readContainer(const ContainerNode *node,
                     	                    const string &name)
-					    throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "readContainer()", name, PJ_JSON_VAL_OBJ);
@@ -416,7 +397,6 @@
 
 static ContainerNode jsonNode_readArray(const ContainerNode *node,
                     	                const string &name)
-					throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     json_verify(jdat, "readArray()", name, PJ_JSON_VAL_ARRAY);
@@ -442,7 +422,6 @@
 static void jsonNode_writeNumber(ContainerNode *node,
            		         const string &name,
            		         float num)
-           		         throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     pj_json_elem *el = jdat->doc->allocElement();
@@ -454,7 +433,6 @@
 static void jsonNode_writeBool(ContainerNode *node,
            		       const string &name,
            		       bool value)
-			       throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     pj_json_elem *el = jdat->doc->allocElement();
@@ -466,7 +444,6 @@
 static void jsonNode_writeString(ContainerNode *node,
            		         const string &name,
            		         const string &value)
-				 throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     pj_json_elem *el = jdat->doc->allocElement();
@@ -481,7 +458,6 @@
 static void jsonNode_writeStringVector(ContainerNode *node,
            		               const string &name,
            		               const StringVector &value)
-				       throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     pj_json_elem *el = jdat->doc->allocElement();
@@ -502,7 +478,6 @@
 
 static ContainerNode jsonNode_writeNewContainer(ContainerNode *node,
                      	                        const string &name)
-					        throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     pj_json_elem *el = jdat->doc->allocElement();
@@ -523,7 +498,6 @@
 
 static ContainerNode jsonNode_writeNewArray(ContainerNode *node,
                      	                    const string &name)
-					    throw(Error)
 {
     json_node_data *jdat = (json_node_data*)&node->data;
     pj_json_elem *el = jdat->doc->allocElement();
Index: pjsip/src/pjsua2/media.cpp
===================================================================
--- pjsip/src/pjsua2/media.cpp	(revision 5883)
+++ pjsip/src/pjsua2/media.cpp	(working copy)
@@ -128,7 +128,7 @@
 
 }
 
-void AudioMedia::registerMediaPort(MediaPort port) throw(Error)
+void AudioMedia::registerMediaPort(MediaPort port)
 {
     /* Check if media already added to Conf bridge. */
     pj_assert(!Endpoint::instance().mediaExists(*this));
@@ -178,7 +178,7 @@
     unregisterMediaPort();
 }
 
-ConfPortInfo AudioMedia::getPortInfo() const throw(Error)
+ConfPortInfo AudioMedia::getPortInfo() const
 {
     return AudioMedia::getPortInfoFromId(id);
 }
@@ -188,7 +188,7 @@
     return id;
 }
 
-ConfPortInfo AudioMedia::getPortInfoFromId(int port_id) throw(Error)
+ConfPortInfo AudioMedia::getPortInfoFromId(int port_id)
 {
     pjsua_conf_port_info pj_info;
     ConfPortInfo pi;
@@ -198,7 +198,7 @@
     return pi;
 }
 
-void AudioMedia::startTransmit(const AudioMedia &sink) const throw(Error)
+void AudioMedia::startTransmit(const AudioMedia &sink) const
 {
     PJSUA2_CHECK_EXPR( pjsua_conf_connect(id, sink.id) );
 }
@@ -205,7 +205,6 @@
 
 void AudioMedia::startTransmit2(const AudioMedia &sink,
 				const AudioMediaTransmitParam &param) const
-     throw(Error)
 {
     pjsua_conf_connect_param pj_param;
     
@@ -214,22 +213,22 @@
     PJSUA2_CHECK_EXPR( pjsua_conf_connect2(id, sink.id, &pj_param) );
 }
 
-void AudioMedia::stopTransmit(const AudioMedia &sink) const throw(Error)
+void AudioMedia::stopTransmit(const AudioMedia &sink) const
 {
     PJSUA2_CHECK_EXPR( pjsua_conf_disconnect(id, sink.id) );
 }
 
-void AudioMedia::adjustRxLevel(float level) throw(Error)
+void AudioMedia::adjustRxLevel(float level)
 {
     PJSUA2_CHECK_EXPR( pjsua_conf_adjust_tx_level(id, level) );
 }
 
-void AudioMedia::adjustTxLevel(float level) throw(Error)
+void AudioMedia::adjustTxLevel(float level)
 {
     PJSUA2_CHECK_EXPR( pjsua_conf_adjust_rx_level(id, level) );
 }
 
-unsigned AudioMedia::getRxLevel() const throw(Error)
+unsigned AudioMedia::getRxLevel() const
 {
     unsigned level;
     PJSUA2_CHECK_EXPR( pjsua_conf_get_signal_level(id, &level, NULL) );
@@ -236,7 +235,7 @@
     return level * 100 / 255;
 }
 
-unsigned AudioMedia::getTxLevel() const throw(Error)
+unsigned AudioMedia::getTxLevel() const
 {
     unsigned level;
     PJSUA2_CHECK_EXPR( pjsua_conf_get_signal_level(id, NULL, &level) );
@@ -266,7 +265,6 @@
 
 void AudioMediaPlayer::createPlayer(const string &file_name,
 				    unsigned options)
-				    throw(Error)
 {
     if (playerId != PJSUA_INVALID_ID) {
 	PJSUA2_RAISE_ERROR(PJ_EEXISTS);
@@ -302,7 +300,6 @@
 void AudioMediaPlayer::createPlaylist(const StringVector &file_names,
 				      const string &label,
 				      unsigned options)
-				      throw(Error)
 {
     if (playerId != PJSUA_INVALID_ID) {
 	PJSUA2_RAISE_ERROR(PJ_EEXISTS);
@@ -347,7 +344,7 @@
     registerMediaPort(NULL);
 }
 
-AudioMediaPlayerInfo AudioMediaPlayer::getInfo() const throw(Error)
+AudioMediaPlayerInfo AudioMediaPlayer::getInfo() const
 {
     AudioMediaPlayerInfo info;
     pjmedia_wav_player_info pj_info;
@@ -363,7 +360,7 @@
     return info;
 }
 
-pj_uint32_t AudioMediaPlayer::getPos() const throw(Error)
+pj_uint32_t AudioMediaPlayer::getPos() const
 {
     pj_ssize_t pos = pjsua_player_get_pos(playerId);
     if (pos < 0) {
@@ -372,7 +369,7 @@
     return (pj_uint32_t)pos;
 }
 
-void AudioMediaPlayer::setPos(pj_uint32_t samples) throw(Error)
+void AudioMediaPlayer::setPos(pj_uint32_t samples)
 {
     PJSUA2_CHECK_EXPR( pjsua_player_set_pos(playerId, samples) );
 }
@@ -410,7 +407,7 @@
 				        unsigned enc_type,
 				        pj_ssize_t max_size,
 				        unsigned options)
-				        throw(Error)
+				       
 {
     PJ_UNUSED_ARG(max_size);
 
@@ -460,7 +457,7 @@
 }
 
 void ToneGenerator::createToneGenerator(unsigned clock_rate,
-					unsigned channel_count) throw(Error)
+					unsigned channel_count)
 {
     pj_status_t status;
 
@@ -488,7 +485,7 @@
     return tonegen && pjmedia_tonegen_is_busy(tonegen) != 0;
 }
 
-void ToneGenerator::stop() throw(Error)
+void ToneGenerator::stop()
 {
     pj_status_t status;
 
@@ -500,7 +497,7 @@
     PJSUA2_CHECK_RAISE_ERROR2(status, "ToneGenerator::stop()");
 }
 
-void ToneGenerator::rewind() throw(Error)
+void ToneGenerator::rewind()
 {
     pj_status_t status;
 
@@ -513,7 +510,7 @@
 }
 
 void ToneGenerator::play(const ToneDescVector &tones,
-                         bool loop) throw(Error)
+                         bool loop)
 {
     pj_status_t status;
 
@@ -530,7 +527,7 @@
 }
 
 void ToneGenerator::playDigits(const ToneDigitVector &digits,
-                               bool loop) throw(Error)
+                               bool loop)
 {
     pj_status_t status;
 
@@ -546,7 +543,7 @@
     PJSUA2_CHECK_RAISE_ERROR2(status, "ToneGenerator::playDigits()");
 }
 
-ToneDigitMapVector ToneGenerator::getDigitMap() const throw(Error)
+ToneDigitMapVector ToneGenerator::getDigitMap() const
 {
     const pjmedia_tone_digit_map *pdm;
     ToneDigitMapVector tdm;
@@ -578,7 +575,6 @@
 }
 
 void ToneGenerator::setDigitMap(const ToneDigitMapVector &digit_map)
-				throw(Error)
 {
     unsigned i;
     pj_status_t status;
@@ -665,12 +661,12 @@
     clearAudioDevList();
 }
 
-int AudDevManager::getCaptureDev() const throw(Error)
+int AudDevManager::getCaptureDev() const
 {
     return getActiveDev(true);
 }
 
-AudioMedia &AudDevManager::getCaptureDevMedia() throw(Error)
+AudioMedia &AudDevManager::getCaptureDevMedia()
 {
     if (!devMedia)
 	devMedia = new DevAudioMedia;
@@ -677,12 +673,12 @@
     return *devMedia;
 }
 
-int AudDevManager::getPlaybackDev() const throw(Error)
+int AudDevManager::getPlaybackDev() const
 {
     return getActiveDev(false);
 }
 
-AudioMedia &AudDevManager::getPlaybackDevMedia() throw(Error)
+AudioMedia &AudDevManager::getPlaybackDevMedia()
 {
     if (!devMedia)
     	devMedia = new DevAudioMedia;
@@ -689,7 +685,7 @@
     return *devMedia;
 }
 
-void AudDevManager::setCaptureDev(int capture_dev) const throw(Error)
+void AudDevManager::setCaptureDev(int capture_dev) const
 {    
     pjsua_snd_dev_param param;
     pjsua_snd_dev_param_default(&param);    
@@ -704,7 +700,7 @@
     PJSUA2_CHECK_EXPR( pjsua_set_snd_dev2(&param) );
 }
 
-void AudDevManager::setPlaybackDev(int playback_dev) const throw(Error)
+void AudDevManager::setPlaybackDev(int playback_dev) const
 {
     pjsua_snd_dev_param param;
     pjsua_snd_dev_param_default(&param);    
@@ -719,7 +715,7 @@
     PJSUA2_CHECK_EXPR( pjsua_set_snd_dev2(&param) );    
 }
 
-const AudioDevInfoVector &AudDevManager::enumDev() throw(Error)
+const AudioDevInfoVector &AudDevManager::enumDev()
 {
     pjmedia_aud_dev_info pj_info[MAX_DEV_COUNT];
     unsigned count = MAX_DEV_COUNT;
@@ -737,7 +733,7 @@
     return audioDevList;
 }
 
-void AudDevManager::setNullDev() throw(Error)
+void AudDevManager::setNullDev()
 {
     PJSUA2_CHECK_EXPR( pjsua_set_null_snd_dev() );
 }
@@ -747,7 +743,7 @@
     return (MediaPort*)pjsua_set_no_snd_dev();
 }
 
-void AudDevManager::setSndDevMode(unsigned mode) const throw(Error)
+void AudDevManager::setSndDevMode(unsigned mode) const
 {    
     int capture_dev = 0, playback_dev = 0;
     pjsua_snd_dev_param param;
@@ -763,12 +759,12 @@
 }
 
 void AudDevManager::setEcOptions(unsigned tail_msec,
-				 unsigned options) throw(Error)
+				 unsigned options)
 {
     PJSUA2_CHECK_EXPR( pjsua_set_ec(tail_msec, options) );
 }
 
-unsigned AudDevManager::getEcTail() const throw(Error)
+unsigned AudDevManager::getEcTail() const
 {
     unsigned tail_msec = 0;
 
@@ -782,7 +778,7 @@
     return PJ2BOOL(pjsua_snd_is_active());
 }
 
-void AudDevManager::refreshDevs() throw(Error)
+void AudDevManager::refreshDevs()
 {
     PJSUA2_CHECK_EXPR( pjmedia_aud_dev_refresh() );
 }
@@ -793,7 +789,7 @@
 }
 
 AudioDevInfo
-AudDevManager::getDevInfo(int id) const throw(Error)
+AudDevManager::getDevInfo(int id) const
 {
     AudioDevInfo dev_info;
     pjmedia_aud_dev_info pj_info;
@@ -805,7 +801,7 @@
 }
 
 int AudDevManager::lookupDev(const string &drv_name,
-			     const string &dev_name) const throw(Error)
+			     const string &dev_name) const
 {
     pjmedia_aud_dev_index pj_idx = 0;
 
@@ -824,7 +820,7 @@
 
 void
 AudDevManager::setExtFormat(const MediaFormatAudio &format,
-			    bool keep) throw(Error)
+			    bool keep)
 {
     pjmedia_format pj_format = format.toPj();
 
@@ -833,7 +829,7 @@
 					     keep) );
 }
 
-MediaFormatAudio AudDevManager::getExtFormat() const throw(Error)
+MediaFormatAudio AudDevManager::getExtFormat() const
 {
     pjmedia_format pj_format;
     MediaFormatAudio format;
@@ -847,7 +843,7 @@
 }
 
 void AudDevManager::setInputLatency(unsigned latency_msec,
-				    bool keep) throw(Error)
+				    bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY,
 					     &latency_msec,
@@ -854,7 +850,7 @@
 					     keep) );
 }
 
-unsigned AudDevManager::getInputLatency() const throw(Error)
+unsigned AudDevManager::getInputLatency() const
 {
     unsigned latency_msec = 0;
 
@@ -866,7 +862,7 @@
 
 void
 AudDevManager::setOutputLatency(unsigned latency_msec,
-				bool keep) throw(Error)
+				bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY,
 					     &latency_msec,
@@ -873,7 +869,7 @@
 					     keep) );
 }
 
-unsigned AudDevManager::getOutputLatency() const throw(Error)
+unsigned AudDevManager::getOutputLatency() const
 {
     unsigned latency_msec = 0;
 
@@ -883,7 +879,7 @@
     return latency_msec;
 }
 
-void AudDevManager::setInputVolume(unsigned volume, bool keep) throw(Error)
+void AudDevManager::setInputVolume(unsigned volume, bool keep)
 {
     PJSUA2_CHECK_EXPR(
 	    pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING,
@@ -891,7 +887,7 @@
 				  keep) );
 }
 
-unsigned AudDevManager::getInputVolume() const throw(Error)
+unsigned AudDevManager::getInputVolume() const
 {
     unsigned volume = 0;
 
@@ -902,7 +898,7 @@
     return volume;
 }
 
-void AudDevManager::setOutputVolume(unsigned volume, bool keep) throw(Error)
+void AudDevManager::setOutputVolume(unsigned volume, bool keep)
 {
     PJSUA2_CHECK_EXPR(
 	    pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
@@ -910,7 +906,7 @@
 				  keep) );
 }
 
-unsigned AudDevManager::getOutputVolume() const throw(Error)
+unsigned AudDevManager::getOutputVolume() const
 {
     unsigned volume = 0;
 
@@ -921,7 +917,7 @@
     return volume;
 }
 
-unsigned AudDevManager::getInputSignal() const throw(Error)
+unsigned AudDevManager::getInputSignal() const
 {
     unsigned signal = 0;
 
@@ -932,7 +928,7 @@
     return signal;
 }
 
-unsigned AudDevManager::getOutputSignal() const throw(Error)
+unsigned AudDevManager::getOutputSignal() const
 {
     unsigned signal = 0;
 
@@ -945,7 +941,7 @@
 
 void
 AudDevManager::setInputRoute(pjmedia_aud_dev_route route,
-			     bool keep) throw(Error)
+			     bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE,
 					     &route,
@@ -952,7 +948,7 @@
 					     keep) );
 }
 
-pjmedia_aud_dev_route AudDevManager::getInputRoute() const throw(Error)
+pjmedia_aud_dev_route AudDevManager::getInputRoute() const
 {
     pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_DEFAULT;
 
@@ -964,7 +960,7 @@
 
 void
 AudDevManager::setOutputRoute(pjmedia_aud_dev_route route,
-			      bool keep) throw(Error)
+			      bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
 					     &route,
@@ -971,7 +967,7 @@
 					     keep) );
 }
 
-pjmedia_aud_dev_route AudDevManager::getOutputRoute() const throw(Error)
+pjmedia_aud_dev_route AudDevManager::getOutputRoute() const
 {
     pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_DEFAULT;
 
@@ -981,7 +977,7 @@
     return route;
 }
 
-void AudDevManager::setVad(bool enable, bool keep) throw(Error)
+void AudDevManager::setVad(bool enable, bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_VAD,
 					     &enable,
@@ -988,7 +984,7 @@
 					     keep) );
 }
 
-bool AudDevManager::getVad() const throw(Error)
+bool AudDevManager::getVad() const
 {
     bool enable = false;
 
@@ -998,7 +994,7 @@
     return enable;
 }
 
-void AudDevManager::setCng(bool enable, bool keep) throw(Error)
+void AudDevManager::setCng(bool enable, bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_CNG,
 					     &enable,
@@ -1005,7 +1001,7 @@
 					     keep) );
 }
 
-bool AudDevManager::getCng() const throw(Error)
+bool AudDevManager::getCng() const
 {
     bool enable = false;
 
@@ -1015,7 +1011,7 @@
     return enable;
 }
 
-void AudDevManager::setPlc(bool enable, bool keep) throw(Error)
+void AudDevManager::setPlc(bool enable, bool keep)
 {
     PJSUA2_CHECK_EXPR( pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_PLC,
 					     &enable,
@@ -1022,7 +1018,7 @@
 					     keep) );
 }
 
-bool AudDevManager::getPlc() const throw(Error)
+bool AudDevManager::getPlc() const
 {
     bool enable = false;
 
@@ -1040,7 +1036,7 @@
     audioDevList.clear();
 }
 
-int AudDevManager::getActiveDev(bool is_capture) const throw(Error)
+int AudDevManager::getActiveDev(bool is_capture) const
 {
     int capture_dev = 0, playback_dev = 0;
     PJSUA2_CHECK_EXPR( pjsua_get_snd_dev(&capture_dev, &playback_dev) );
@@ -1128,7 +1124,7 @@
 #endif
 }
 
-VideoWindowInfo VideoWindow::getInfo() const throw(Error)
+VideoWindowInfo VideoWindow::getInfo() const
 {
     VideoWindowInfo vwi;
     pj_bzero(&vwi, sizeof(vwi));
@@ -1150,7 +1146,7 @@
     return vwi;
 }
     
-void VideoWindow::Show(bool show) throw(Error)
+void VideoWindow::Show(bool show)
 {
 #if PJSUA_HAS_VIDEO
     PJSUA2_CHECK_EXPR( pjsua_vid_win_set_show(winId, show) );
@@ -1159,7 +1155,7 @@
 #endif
 }
 
-void VideoWindow::setPos(const MediaCoordinate &pos) throw(Error)
+void VideoWindow::setPos(const MediaCoordinate &pos)
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_coord pj_pos;
@@ -1172,7 +1168,7 @@
 #endif
 }
 
-void VideoWindow::setSize(const MediaSize &size) throw(Error)
+void VideoWindow::setSize(const MediaSize &size)
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_rect_size pj_size;
@@ -1185,7 +1181,7 @@
 #endif
 }
 
-void VideoWindow::rotate(int angle) throw(Error)
+void VideoWindow::rotate(int angle)
 {
 #if PJSUA_HAS_VIDEO
     PJSUA2_CHECK_EXPR( pjsua_vid_win_rotate(winId, angle) );
@@ -1194,7 +1190,7 @@
 #endif
 }
 
-void VideoWindow::setWindow(const VideoWindowHandle &win) throw(Error)
+void VideoWindow::setWindow(const VideoWindowHandle &win)
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_vid_dev_hwnd vhwnd;
@@ -1263,7 +1259,7 @@
 #endif
 }
 
-void VideoPreview::start(const VideoPreviewOpParam &param) throw(Error)
+void VideoPreview::start(const VideoPreviewOpParam &param)
 {
 #if PJSUA_HAS_VIDEO
     pjsua_vid_preview_param prm = param.toPj();
@@ -1274,7 +1270,7 @@
 #endif
 }
 
-void VideoPreview::stop() throw(Error)
+void VideoPreview::stop()
 {
 #if PJSUA_HAS_VIDEO
     pjsua_vid_preview_stop(devId);
@@ -1364,7 +1360,7 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-void VidDevManager::refreshDevs() throw(Error)
+void VidDevManager::refreshDevs()
 {
 #if PJSUA_HAS_VIDEO
     PJSUA2_CHECK_EXPR(pjmedia_vid_dev_refresh());
@@ -1380,7 +1376,7 @@
 #endif
 }
 
-VideoDevInfo VidDevManager::getDevInfo(int dev_id) const throw(Error)
+VideoDevInfo VidDevManager::getDevInfo(int dev_id) const
 {
     VideoDevInfo dev_info;
 #if PJSUA_HAS_VIDEO
@@ -1395,7 +1391,7 @@
     return dev_info;
 }
 
-const VideoDevInfoVector &VidDevManager::enumDev() throw(Error)
+const VideoDevInfoVector &VidDevManager::enumDev()
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_vid_dev_info pj_info[MAX_DEV_COUNT];
@@ -1416,7 +1412,7 @@
 }
 
 int VidDevManager::lookupDev(const string &drv_name,
-			     const string &dev_name) const throw(Error)
+			     const string &dev_name) const
 {
     pjmedia_vid_dev_index pj_idx = 0;
 #if PJSUA_HAS_VIDEO
@@ -1443,7 +1439,7 @@
 
 void VidDevManager::setFormat(int dev_id,
 			      const MediaFormatVideo &format,
-			      bool keep) throw(Error)
+			      bool keep)
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_format pj_format = format.toPj();
@@ -1459,7 +1455,7 @@
 #endif
 }
 
-MediaFormatVideo VidDevManager::getFormat(int dev_id) const throw(Error)
+MediaFormatVideo VidDevManager::getFormat(int dev_id) const
 {
     MediaFormatVideo vid_format;
     pj_bzero(&vid_format, sizeof(vid_format));
@@ -1477,7 +1473,7 @@
 
 void VidDevManager::setInputScale(int dev_id,
 				  const MediaSize &scale,
-				  bool keep) throw(Error)
+				  bool keep)
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_rect_size pj_size;
@@ -1494,7 +1490,7 @@
 #endif
 }
 
-MediaSize VidDevManager::getInputScale(int dev_id) const throw(Error)
+MediaSize VidDevManager::getInputScale(int dev_id) const
 {
     MediaSize scale;
     pj_bzero(&scale, sizeof(scale));
@@ -1514,7 +1510,7 @@
 
 void VidDevManager::setOutputWindowFlags(int dev_id, 
 					 int flags, 
-					 bool keep) throw(Error)
+					 bool keep)
 {    
 #if PJSUA_HAS_VIDEO    
     PJSUA2_CHECK_EXPR(pjsua_vid_dev_set_setting(dev_id,
@@ -1528,7 +1524,7 @@
 #endif
 }
 
-int VidDevManager::getOutputWindowFlags(int dev_id) throw(Error)
+int VidDevManager::getOutputWindowFlags(int dev_id)
 {
     int flags = 0;
 
@@ -1543,7 +1539,7 @@
 }
 
 void VidDevManager::switchDev(int dev_id,
-			      const VideoSwitchParam &param) throw(Error)
+			      const VideoSwitchParam &param)
 {
 #if PJSUA_HAS_VIDEO
     pjmedia_vid_dev_switch_param pj_param;
@@ -1581,7 +1577,7 @@
     
 void VidDevManager::setCaptureOrient(pjmedia_vid_dev_index dev_id,
     			  	     pjmedia_orient orient,
-    			  	     bool keep) throw(Error)
+    			  	     bool keep)
 {
 #if PJSUA_HAS_VIDEO
     PJSUA2_CHECK_EXPR(pjsua_vid_dev_set_setting(dev_id,
Index: pjsip/src/pjsua2/persistent.cpp
===================================================================
--- pjsip/src/pjsua2/persistent.cpp	(revision 5883)
+++ pjsip/src/pjsua2/persistent.cpp	(working copy)
@@ -27,74 +27,71 @@
     return getRootContainer().hasUnread();
 }
 
-string PersistentDocument::unreadName() const throw(Error)
+string PersistentDocument::unreadName() const
 {
     return getRootContainer().unreadName();
 }
 
-int PersistentDocument::readInt(const string &name) const throw(Error)
+int PersistentDocument::readInt(const string &name) const
 {
     return (int)getRootContainer().readNumber(name);
 }
 
-float PersistentDocument::readNumber(const string &name) const throw(Error)
+float PersistentDocument::readNumber(const string &name) const
 {
     return getRootContainer().readNumber(name);
 }
 
-bool PersistentDocument::readBool(const string &name) const throw(Error)
+bool PersistentDocument::readBool(const string &name) const
 {
     return getRootContainer().readBool(name);
 }
 
-string PersistentDocument::readString(const string &name) const throw(Error)
+string PersistentDocument::readString(const string &name) const
 {
     return getRootContainer().readString(name);
 }
 
 StringVector PersistentDocument::readStringVector(const string &name) const
-						  throw(Error)
 {
     return getRootContainer().readStringVector(name);
 }
 
-void PersistentDocument::readObject(PersistentObject &obj) const throw(Error)
+void PersistentDocument::readObject(PersistentObject &obj) const
 {
     getRootContainer().readObject(obj);
 }
 
 ContainerNode PersistentDocument::readContainer(const string &name) const
-					        throw(Error)
 {
     return getRootContainer().readContainer(name);
 }
 
 ContainerNode PersistentDocument::readArray(const string &name) const
-					    throw(Error)
 {
     return getRootContainer().readArray(name);
 }
 
 void PersistentDocument::writeNumber(const string &name,
-				     float num) throw(Error)
+				     float num)
 {
     getRootContainer().writeNumber(name, num);
 }
 
 void PersistentDocument::writeInt(const string &name,
-				  int num) throw(Error)
+				  int num)
 {
     getRootContainer().writeNumber(name, (float)num);
 }
 
 void PersistentDocument::writeBool(const string &name,
-				   bool value) throw(Error)
+				   bool value)
 {
     getRootContainer().writeBool(name, value);
 }
 
 void PersistentDocument::writeString(const string &name,
-                                     const string &value) throw(Error)
+                                     const string &value)
 {
     getRootContainer().writeString(name, value);
 }
@@ -101,24 +98,21 @@
 
 void PersistentDocument::writeStringVector(const string &name,
                                            const StringVector &value)
-					   throw(Error)
 {
     getRootContainer().writeStringVector(name, value);
 }
 
-void PersistentDocument::writeObject(const PersistentObject &obj) throw(Error)
+void PersistentDocument::writeObject(const PersistentObject &obj)
 {
     getRootContainer().writeObject(obj);
 }
 
 ContainerNode PersistentDocument::writeNewContainer(const string &name)
-						    throw(Error)
 {
     return getRootContainer().writeNewContainer(name);
 }
 
 ContainerNode PersistentDocument::writeNewArray(const string &name)
-						    throw(Error)
 {
     return getRootContainer().writeNewArray(name);
 }
@@ -130,74 +124,74 @@
     return op->hasUnread(this);
 }
 
-string ContainerNode::unreadName() const throw(Error)
+string ContainerNode::unreadName() const
 {
     return op->unreadName(this);
 }
 
-int ContainerNode::readInt(const string &name) const throw(Error)
+int ContainerNode::readInt(const string &name) const
 {
     return (int)op->readNumber(this, name);
 }
 
-float ContainerNode::readNumber(const string &name) const throw(Error)
+float ContainerNode::readNumber(const string &name) const
 {
     return op->readNumber(this, name);
 }
 
-bool ContainerNode::readBool(const string &name) const throw(Error)
+bool ContainerNode::readBool(const string &name) const
 {
     return op->readBool(this, name);
 }
 
-string ContainerNode::readString(const string &name) const throw(Error)
+string ContainerNode::readString(const string &name) const
 {
     return op->readString(this, name);
 }
 
 StringVector ContainerNode::readStringVector(const string &name) const
-					     throw(Error)
+					    
 {
     return op->readStringVector(this, name);
 }
 
-void ContainerNode::readObject(PersistentObject &obj) const throw(Error)
+void ContainerNode::readObject(PersistentObject &obj) const
 {
     obj.readObject(*this);
 }
 
 ContainerNode ContainerNode::readContainer(const string &name) const
-					   throw(Error)
+					  
 {
     return op->readContainer(this, name);
 }
 
 ContainerNode ContainerNode::readArray(const string &name) const
-					   throw(Error)
+					  
 {
     return op->readArray(this, name);
 }
 
 void ContainerNode::writeNumber(const string &name,
-				float num) throw(Error)
+				float num)
 {
     return op->writeNumber(this, name, num);
 }
 
 void ContainerNode::writeInt(const string &name,
-			     int num) throw(Error)
+			     int num)
 {
     return op->writeNumber(this, name, (float)num);
 }
 
 void ContainerNode::writeBool(const string &name,
-			      bool value) throw(Error)
+			      bool value)
 {
     return op->writeBool(this, name, value);
 }
 
 void ContainerNode::writeString(const string &name,
-				const string &value) throw(Error)
+				const string &value)
 {
     return op->writeString(this, name, value);
 }
@@ -204,24 +198,21 @@
 
 void ContainerNode::writeStringVector(const string &name,
 				      const StringVector &value)
-				      throw(Error)
 {
     return op->writeStringVector(this, name, value);
 }
 
-void ContainerNode::writeObject(const PersistentObject &obj) throw(Error)
+void ContainerNode::writeObject(const PersistentObject &obj)
 {
     obj.writeObject(*this);
 }
 
 ContainerNode ContainerNode::writeNewContainer(const string &name)
-					       throw(Error)
 {
     return op->writeNewContainer(this, name);
 }
 
 ContainerNode ContainerNode::writeNewArray(const string &name)
-					   throw(Error)
 {
     return op->writeNewArray(this, name);
 }
Index: pjsip/src/pjsua2/presence.cpp
===================================================================
--- pjsip/src/pjsua2/presence.cpp	(revision 5883)
+++ pjsip/src/pjsua2/presence.cpp	(working copy)
@@ -36,7 +36,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void BuddyConfig::readObject(const ContainerNode &node) throw(Error)
+void BuddyConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("BuddyConfig");
 
@@ -44,7 +44,7 @@
     NODE_READ_BOOL     ( this_node, subscribe);
 }
 
-void BuddyConfig::writeObject(ContainerNode &node) const throw(Error)
+void BuddyConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("BuddyConfig");
 
@@ -99,7 +99,7 @@
 /*
  * Create buddy and register the buddy to PJSUA-LIB.
  */
-void Buddy::create(Account &account, const BuddyConfig &cfg) throw(Error)
+void Buddy::create(Account &account, const BuddyConfig &cfg)
 {
     pjsua_buddy_config pj_cfg;
     pjsua_buddy_config_default(&pj_cfg);
@@ -127,7 +127,7 @@
 /*
  * Get detailed buddy info.
  */
-BuddyInfo Buddy::getInfo() const throw(Error)
+BuddyInfo Buddy::getInfo() const
 {
     pjsua_buddy_info pj_bi;
     BuddyInfo bi;
@@ -140,7 +140,7 @@
 /*
  * Enable/disable buddy's presence monitoring.
  */
-void Buddy::subscribePresence(bool subscribe) throw(Error)
+void Buddy::subscribePresence(bool subscribe)
 {
     PJSUA2_CHECK_EXPR( pjsua_buddy_subscribe_pres(id, subscribe) );
 }
@@ -149,7 +149,7 @@
 /*
  * Update the presence information for the buddy.
  */
-void Buddy::updatePresence(void) throw(Error)
+void Buddy::updatePresence(void)
 {
     PJSUA2_CHECK_EXPR( pjsua_buddy_update_pres(id) );
 }
@@ -157,7 +157,7 @@
 /*
  * Send instant messaging outside dialog.
  */
-void Buddy::sendInstantMessage(const SendInstantMessageParam &prm) throw(Error)
+void Buddy::sendInstantMessage(const SendInstantMessageParam &prm)
 {
     BuddyInfo bi = getInfo();
 
@@ -176,7 +176,6 @@
  * Send typing indication outside dialog.
  */
 void Buddy::sendTypingIndication(const SendTypingIndicationParam &prm)
-     throw(Error)
 {
     BuddyInfo bi = getInfo();
 
Index: pjsip/src/pjsua2/siptypes.cpp
===================================================================
--- pjsip/src/pjsua2/siptypes.cpp	(revision 5883)
+++ pjsip/src/pjsua2/siptypes.cpp	(working copy)
@@ -30,7 +30,7 @@
 {
 void readIntVector( ContainerNode &node,
                     const string &array_name,
-                    IntVector &v) throw(Error)
+                    IntVector &v)
 {
     ContainerNode array_node = node.readArray(array_name);
     v.resize(0);
@@ -41,7 +41,7 @@
 
 void writeIntVector(ContainerNode &node,
                     const string &array_name,
-                    const IntVector &v) throw(Error)
+                    const IntVector &v)
 {
     ContainerNode array_node = node.writeNewArray(array_name);
     for (unsigned i=0; i<v.size(); ++i) {
@@ -50,7 +50,7 @@
 }
 
 void readQosParams( ContainerNode &node,
-                    pj_qos_params &qos) throw(Error)
+                    pj_qos_params &qos)
 {
     ContainerNode this_node = node.readContainer("qosParams");
 
@@ -61,7 +61,7 @@
 }
 
 void writeQosParams( ContainerNode &node,
-                     const pj_qos_params &qos) throw(Error)
+                     const pj_qos_params &qos)
 {
     ContainerNode this_node = node.writeNewContainer("qosParams");
 
@@ -73,7 +73,7 @@
 
 void readSipHeaders( const ContainerNode &node,
                      const string &array_name,
-                     SipHeaderVector &headers) throw(Error)
+                     SipHeaderVector &headers)
 {
     ContainerNode headers_node = node.readArray(array_name);
     headers.resize(0);
@@ -89,7 +89,7 @@
 
 void writeSipHeaders(ContainerNode &node,
                      const string &array_name,
-                     const SipHeaderVector &headers) throw(Error)
+                     const SipHeaderVector &headers)
 {
     ContainerNode headers_node = node.writeNewArray(array_name);
     for (unsigned i=0; i<headers.size(); ++i) {
@@ -117,7 +117,7 @@
 {
 }
 
-void AuthCredInfo::readObject(const ContainerNode &node) throw(Error)
+void AuthCredInfo::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("AuthCredInfo");
 
@@ -131,7 +131,7 @@
     NODE_READ_STRING( this_node, akaAmf);
 }
 
-void AuthCredInfo::writeObject(ContainerNode &node) const throw(Error)
+void AuthCredInfo::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("AuthCredInfo");
 
@@ -208,7 +208,7 @@
     this->qosIgnoreError = PJ2BOOL(prm.qos_ignore_error);
 }
 
-void TlsConfig::readObject(const ContainerNode &node) throw(Error)
+void TlsConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("TlsConfig");
 
@@ -230,7 +230,7 @@
     NODE_READ_BOOL    ( this_node, qosIgnoreError);
 }
 
-void TlsConfig::writeObject(ContainerNode &node) const throw(Error)
+void TlsConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("TlsConfig");
 
@@ -288,7 +288,7 @@
     return tc;
 }
 
-void TransportConfig::readObject(const ContainerNode &node) throw(Error)
+void TransportConfig::readObject(const ContainerNode &node)
 {
     ContainerNode this_node = node.readContainer("TransportConfig");
 
@@ -301,7 +301,7 @@
     NODE_READ_OBJ       ( this_node, tlsConfig);
 }
 
-void TransportConfig::writeObject(ContainerNode &node) const throw(Error)
+void TransportConfig::writeObject(ContainerNode &node) const
 {
     ContainerNode this_node = node.writeNewContainer("TransportConfig");
 
@@ -378,7 +378,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void SipHeader::fromPj(const pjsip_hdr *hdr) throw(Error)
+void SipHeader::fromPj(const pjsip_hdr *hdr)
 {
     char *buf = NULL;
     int len = 0;
@@ -435,7 +435,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void SipMultipartPart::fromPj(const pjsip_multipart_part &prm) throw(Error)
+void SipMultipartPart::fromPj(const pjsip_multipart_part &prm)
 {
     headers.clear();
     pjsip_hdr* pj_hdr = prm.hdr.next;
@@ -574,7 +574,7 @@
             multipartContentType.subType == "" && multipartParts.size() == 0);
 }
 
-void SipTxOption::fromPj(const pjsua_msg_data &prm) throw(Error)
+void SipTxOption::fromPj(const pjsua_msg_data &prm)
 {
     targetUri = pj2Str(prm.target_uri);
 
Index: pjsip-apps/src/samples/pjsua2_demo.cpp
===================================================================
--- pjsip-apps/src/samples/pjsua2_demo.cpp	(revision 5883)
+++ pjsip-apps/src/samples/pjsua2_demo.cpp	(working copy)
@@ -105,7 +105,7 @@
     }
 }
 
-static void mainProg1(Endpoint &ep) throw(Error)
+static void mainProg1(Endpoint &ep)
 {
     // Init library
     EpConfig ep_cfg;
@@ -151,7 +151,7 @@
     delete acc;
 }
 
-static void mainProg2() throw(Error)
+static void mainProg2()
 {
     string json_str;
     {
@@ -197,7 +197,7 @@
 }
 
 
-static void mainProg3(Endpoint &ep) throw(Error)
+static void mainProg3(Endpoint &ep)
 {
     const char *paths[] = { "../../../../tests/pjsua/wavs/input.16.wav",
 			    "../../tests/pjsua/wavs/input.16.wav",
@@ -256,7 +256,7 @@
 }
 
 
-static void mainProg() throw(Error)
+static void mainProg()
 {
     string json_str;
 
@@ -308,7 +308,7 @@
 }
 
 
-static void mainProg4(Endpoint &ep) throw(Error)
+static void mainProg4(Endpoint &ep)
 {
     // Init library
     EpConfig ep_cfg;
_______________________________________________
Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip@xxxxxxxxxxxxxxx
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux