`
`
`
`
`
`
`
`
`UNITED STATES PATENT AND TRADEMARK OFFICE
`
`
`BEFORE THE PATENT TRIAL AND APPEAL BOARD
`
`APPLE INC.
`
`Petitioner,
`
`v.
`
`
`
`
`
`VOIP-PAL.COM, INC.,
`
`Patent Owner
`
`
`
`
`Case No. IPR2016-01198
`U.S. Patent 9,179,005
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`DECLARATION IN SUPPORT PATENT OWNER
`RESPONSE TO INTER PARTES PETITION
`
`
`
`
`Voip-Pal Ex. 2016
`IPR2016-01198
`
`Voip-Pal Ex. 2025
`IPR2017-01398
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`I, William Henry Mangione-Smith, declare as follows:
`
`I.
`
`INTRODUCTION
`1.
`
`During the preparation of this Declaration, I have reviewed the
`
`following, as well as the other documents discussed in this Declaration:
`
`a. U.S. Patent No. 8,542,815 (“the ‘815 Patent”) and its file history;
`
`b. U.S. Patent No. 9,179,005 (“the ‘005 Patent”) and its file history;
`
`c. Apple, Inc.’s Petition For Inter Partes Review Of U.S. Patent No.
`
`8,542,815, including attached Declaration Of Henry H. Houh,
`
`PhD;
`
`d. Apple, Inc.’s Petition For Inter Partes Review Of U.S. Patent No.
`
`9,179,005, including attached Declaration Of Henry H. Houh,
`
`PhD;
`
`e. Declaration of Ryan Purita (Ex. 2011);
`
`f. Declaration of Johan Emil Viktor Bjorsell (Ex. 2012);
`
`g. Declaration of Clay Perreault (Ex. 2013);
`
`h. Declaration of David Terry (Ex. 2018);
`
`i. Deposition Transcript of Henry H. Houh, Ph.D. Volumes I and I
`
`(Ex. 2043, 2044)
`
`j. Subversion repository svn.tar file;
`
`k. U.S. Patent No. 7,486,684 to Chu (“the Chu ‘684 Patent”);
`
`-1-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`l. U.S. Patent No. 8,036,366 to Chu (“the Chu ‘366 Patent”);
`
`m. U.S. Patent Publication No. 2007/0064919 to Chen at al. (“the
`
`Chen Patent”).
`
`2.
`
`I have been retained by Voip-PAL.Com Inc. (“Voip-PAL”) as an
`
`expert in the fields of computer science, computer communications, and related
`
`technologies. I am being compensated at my normal consulting rate. My
`
`compensation is not dependent on and in no way affects the substance of my
`
`statements in this Declaration. I have no financial interest in Voip-PAL, in the
`
`‘815 Patent or in the ‘005 Patent.
`
`II. QUALIFICATIONS
`3. My technical background covers most aspects of computer system
`
`design, including low level circuitry, computer architecture, computer networking,
`
`graphics, application software, client-server application, Web technology, and
`
`system software (e.g., operating systems and compilers). I am a member of the
`
`Institute of Electrical and Electronics Engineers and the Association for
`
`Computing Machinery, which are
`
`the
`
`two most significant professional
`
`organizations in my profession. I have been employed as a design engineer,
`
`research engineer, professor and technical expert. Over my professional career I
`
`have been an active inventor with 109 issued U.S. patents, 196 published and
`
`pending U.S. patent applications and many unpublished U.S. patent applications.
`
`-2-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`4.
`
`From 1984 until 1991 I attended the University of Michigan in Ann
`
`Arbor, Michigan. I was awarded the degrees of Bachelor of Science and
`
`Engineering, Master of Science and Engineering, and Doctorate of Philosophy.
`
`My doctoral research focused on high performance computing systems including
`
`computer architecture, applications and operating system software, and compiler
`
`technology. One of my responsibilities during my graduate studies included
`
`teaching senior undergraduate students who were about to enter the profession.
`
`5.
`
`After graduating from the University of Michigan I was employed by
`
`Motorola in Schaumburg, Illinois. While at Motorola, I was part of a team
`
`designing and manufacturing the first commercial battery-powered product capable
`
`of delivering Internet email over a wireless (i.e., radio frequency) link and one of
`
`the first personal digital assistants. I also served as the lead architect on the
`
`second-generation of this device. Part of my responsibilities at Motorola involved
`
`the specification, design, and testing of system control Application-Specific
`
`Integrated Circuits (“ASICs”). I conducted the initial research and advanced
`
`design that resulted in the Motorola M*Core embedded microprocessor. M*Core
`
`was designed to provide the high performance of desktop microprocessors with the
`
`low power of contemporaneous embedded processors. The M*Core received
`
`widespread use in a number of communications products including various
`
`-3-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`telephonic handsets, advanced pagers, and embedded infrastructure. While at
`
`Motorola I was the sole inventor on one U.S. patent.
`
`6.
`
`From 1995 until 2005 I was employed by the University of California
`
`at Los Angeles (“UCLA”) as a professor of Electrical Engineering. I was the
`
`director of the laboratory for Compiler and Architecture Research in Embedded
`
`Systems (“CARES”) and served as the field chair for Embedded Computing
`
`Systems. The CARES research team focused on research, engineering and design
`
`challenges in the context of battery-powered and multi-media mobile computing
`
`devices. One of the key developments of my lab was the Mediabench software
`
`tool, which is widely used to design and evaluate multi-media embedded devices.
`
`Key elements of Mediabench include software that is essential for modern digital
`
`telephony. My primary responsibility, in addition to classroom teaching, involved
`
`directing the research and training of graduate students. I was a tenured member of
`
`the faculty, and had responsibilities for teaching as well as scholarly research.
`
`While at UCLA I was a named inventor on three U.S. patent applications, one of
`
`which issued as a patent. My colleagues at UCLA were some of the leading
`
`scientists and engineers in the world with a long list of innovations from computer
`
`network security devices to the nicotine patch. The graduate student researchers in
`
`my laboratory came from a diverse set of backgrounds, all with undergraduate
`
`degrees in computer engineering, electrical engineering or computer science, many
`
`-4-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`with multiple years of experience working as professional engineers in areas such
`
`as software development, computer system design and ASIC circuit design.
`
`7.
`
`From 2005 until 2009, I was employed at Intellectual Ventures in
`
`Bellevue, Washington. My responsibilities at Intellectual Ventures included
`
`business development, technology assessment, market forecasting, university
`
`outreach, collaborative inventing, intellectual property licensing support, and
`
`intellectual property asset pricing. My colleagues and co-inventors at Intellectual
`
`Ventures included the former lead intellectual property strategist at Intel, Intel’s
`
`lead IP council, Microsoft’s chief software architect, the founder of Microsoft
`
`research, the designer of the Mach operating system, the architect of the U.S.
`
`Defense Department’s Strategic Defense Initiative, the founder of Thinking
`
`Machines (a seminal parallel processing computer system), and Bill Gates. I had
`
`responsibility for hiring and managing over 15 staff members including multiple
`
`Ph.Ds. with degrees in electrical engineering and decades of experience in product
`
`design and engineering.
`
`8.
`
`A brief summary of some of my qualifications for forming the
`
`opinions in this declaration are as follows: I have more than 27 years of experience
`
`as a computer architect, computer system designer, educator, and as an executive
`
`in the PC and electronics business. I am also a member of a number of
`
`professional associations, such as the ACM, IEEE and have been intimately
`
`-5-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`involved in professional research through the International Symposium on
`
`Microarchitecture (Program Chair for 26th and General Chair for 36th), IEEE
`
`Transactions on Computers (Associate Editor), ACM Transactions on Embedded
`
`Computing Systems (Associate Editor), and IEEE Computer (Associate Editor). I
`
`also have been on the program committees for ISCA, MICRO, ISLPED, Network
`
`Processors Workshop, FPL, Complexity-Effective Design, RAW, Workshop on
`
`Mediaprocessors, and DSP, FPT, and INTERACT.
`
`9.
`
`For further details regarding my employment and academic history,
`
`please refer to my curriculum vitae (Ex. 2045).
`
`III. RELEVANT LAW
`10.
`I am not an attorney and I have no formal legal training. For the
`
`purposes of this Declaration, I have been informed about certain aspects of the law
`
`that are relevant to my opinions. My understanding of these aspects is summarized
`
`below.
`
`11.
`
`I have been informed and understand that at the time of invention for
`
`the patents in question the United States employed a principle known as the “first
`
`to invent”. It is my understanding that this principle gives priority to a first
`
`inventor who can convincingly claim to have invented a concept earlier than a
`
`second inventor even if circumstances indicate that the second inventor filed for
`
`patent protection earlier than the first inventor.
`
`-6-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`12.
`
`It is my understanding that an inventor can substantiate a date earlier
`
`than a patent filing date for purpose of priority and prior art by providing
`
`convincing evidence that the inventor had actually reduced the claimed invention
`
`to practice at a date prior to filing for patent protection. It is my understanding that
`
`the phrase “actual reduction to practice” means that the inventor had either
`
`practiced method claims or held in their possession a working artifact that
`
`practiced method or apparatus claims, and that the inventor was aware that the
`
`working artifact worked for its intended purpose.
`
`13.
`
`It is my understanding that with regards to consideration of prior art
`
`for a particular patent U.S.C. 102(e) states:
`
`(e) the invention was described in — (1) an application for patent,
`
`published under section 122(b), by another filed in the United States
`
`before the invention by the applicant for patent or (2) a patent granted
`
`on an application for patent by another filed in the United States
`
`before the invention by the applicant for patent, except that an
`
`international application filed under the treaty defined in section
`
`351(a) shall have the effects for the purposes of this subsection of an
`
`application filed in the United States only if the international
`
`application designated the United States and was published under
`
`Article 21(2) of such treaty in the English language.
`
`-7-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`IV. LEVEL OF ORDINARY SKILL IN THE ART
`14. Based on my review of the ’815 Patent and the ‘005 Patent and my
`
`background and experience in the field of computer science, it is my opinion that
`
`one of ordinary skill in the art as of the priority date would be someone with an
`
`undergraduate degree in either Computer Science, Computer Engineering,
`
`Electrical Engineering, or a closely related discipline. Furthermore, I believe that
`
`such a person would also have 2 years of experience in system-level software
`
`development. In my opinion a greater degree of professional experience could
`
`serve to replace some degree of formal education. I also believe that some greater
`
`degree of formal education could serve to replace some degree of professional
`
`work experience.
`
`15. Based on my education and experience, I am familiar with the level of
`
`knowledge that one of ordinary skill would have possessed during the relevant
`
`period of time. By the priority date of the ‘815 Patent and the ‘005 Patent, I was a
`
`person who had more than ordinary skill in the art.
`
`V. OVERVIEW OF THE ‘815 AND ‘005 PATENTS
`16. The ‘815 and ‘005 Patents disclose a method and apparatus for
`
`routing communications, such as voice calls or video calls, between an internet
`
`network (i.e. a network based on the Internet Protocol, or IP) and a public switched
`
`telephone network (PSTN), and between two endpoints on an IP network. The
`
`-8-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`claimed routing methods and apparatus allow a call to be classified and routed as a
`
`“public network call” or as a “private network call” based on whether at least one
`
`calling attribute and at least a portion of the callee identifier meet certain network
`
`criteria.
`
`17. A key aspect of the claimed inventions disclosed in the ‘815 and ‘005
`
`patent is that they relate to specific calling individuals. The shared written
`
`description and claims make frequent use of the term “caller” and “callee”. The
`
`specification make it apparent that a caller is an individual who initiates a call and
`
`a callee is an individual the caller wishes to communicate with. For example, the
`
`‘815 Patent associates a caller or callee with a user (see for example Fig. 9, 10,
`
`‘815@2:4-7,
`
`‘815@2:48-50,
`
`‘815@2:68-61,
`
`‘815@3:1-2,
`
`‘815@3:40-46,
`
`‘815@15:5-23, ‘815@15:41-61, and ‘815@16:37-51). The detailed description
`
`also makes use of the word “subscriber” to refer to callers, i.e. individuals who
`
`subscribe to the claimed system and can initiate calls to designated callees. Thus,
`
`it is my belief that a person of ordinary skill in the art would understand that the
`
`‘815 and ‘005 patents are directed to individual people (i.e. users or subscribers)
`
`who initiate calls to other individual people.
`
`18.
`
`I have been asked to analyze Claims 1, 7, 27, 28, 34, 54, 72-74, 92, 93
`
`and 111 of the ‘815 Patent. I have also been asked to analyze Claims 1, 24-26, 49,
`
`50, 73-79, 83, 84, 88, 89, 92, 94-96, 98 and 99 of the ‘005 patent.
`
`-9-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`VI. CLAIM CONSTRUCTION ANALYSIS
`19.
`I have been asked to apply the Petitioner’s claim construction in my
`
`analysis for this opinion. While I have accepted these proposed constructions on
`
`their face for purposes of my analysis I have not formed an opinion as to the
`
`correct construction for each term.
`
`VII. SOURCE CODE ANALYSIS
`20.
`I have been asked to analyze version 361 of the RBR software. I have
`
`been provided with a file named “svn.tar”, which contains a Subversion source
`
`code repository. Subversion is a commonly used tool to maintain and record
`
`changes to source code. A source code repository records the history of changes
`
`that are made to each file over time. I have reviewed the Declaration of Ryan
`
`Purita (Ex. 2011) regarding the file named “svn.tar” that he analyzed and I have
`
`confirmed that the file that I received has the same signatures identified in Mr.
`
`Purita’s
`
`declaration
`
`for
`
`the
`
`algorithms
`
`(7c79ec3a4bd14ceaa0f8b8c0d0d3e483),
`
`MD5
`
`SHA1
`
`(87abf73113707e4262c24ffe663afe003742ed2b), CRC32
`
`(954c203e),
`
`and
`
`SHA256
`
`(4dbb53e51e68df305859181e34c1a17349c104190e98008946f2b0de1b577ebc).
`
`MD5 is an algorithm that creates a signature from a data file that is claimed to be
`
`uniquely associated with that file to the same degree as a human fingerprint is to an
`
`-10-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`individual person. CRC32 is like MD5 though not as robust. SHA-1 and SHA-
`
`256 are cryptographic one-way hash functions with no known collisions. Based on
`
`these it is virtually certain that the file I have is identical to the one that was
`
`analyzed by Mr. Purita. I also captured the checksum for all the php source files in
`
`the src directory using the following command from within the source directory:
`
`“cat * | shasum -p -a 256”. This command produced the following output
`
`“214b815b4c8652f1d38d3a8e6c744aa7a28545eaa9fc28ef041737f1120ef9af ?- ”.
`
`21.
`
`I have extracted the Subversion repository from the svn.tar file, and I
`
`then extracted version “361” of the “rbr” directory. I utilized the “tar” and “svn”
`
`utilities that were available on my own computer to perform these functions. The
`
`Subversion repository indicates that Version 361 of the RBR software was last
`
`modified on June 6, 2005 at 09:22:59am.
`
`22. Version 361 of the RBR software consists a number of PHP files that
`
`are run on a server and communicate using an XMLRPC interface. The invite.php
`
`file is the entry point for the messages that are sent from the B2BUA server. The
`
`functions in the invite.php file rely upon functions in the call_routes.class.php file,
`
`which in turn rely upon functions in the call_ttl.class.php file, which in turn uses
`
`code in the call_e164.class.php file. The source code in the call_routes.class.php
`
`file and the call_e164.class.php file also utilizes a configuration file named
`
`-11-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`config.php, a sample of which is provided in the file named config-dist.php in the
`
`same directory.
`
`23.
`
`I have prepared in Ex. 2014 printouts of the files that make up
`
`Version 361 of the RBR software. I have also prepared a log of the files in the
`
`“trunk” directory up through November 2, 2006 in Ex. 2015. The logs were
`
`generated by first updating to the source code as it existed on November 2, 2006
`
`using the “svn update –r 1879” command and then using the “svn log -v”
`
`command from within the trunk directory. This shows the log messages for all
`
`RBR source files within that directory up through November 2, 2006.
`
`24. Based upon my review of the source code provided it is my opinion
`
`that an RBR server running RBR source code Version 361 would implement a call
`
`routing controller, which corresponds to the Routing Controller 16 illustrated in
`
`Fig. 1 of the ‘005 Patent, that received messages when a call was initiated,
`
`processed those messages and responded with a routing message. In the tables
`
`below I have indicated how the RBR server source code maps to certain claims of
`
`the ‘005 Patent.
`
`Patent 9,179,005
`
`1. [1p] A process for
`producing a routing
`message for routing
`communications
`between a caller and a
`callee in a
`
`RBR Source Code Version 361
`
`The RBR server implements a call routing controller.
`Callers and callees, which may be internet (IP) phones or
`endpoints on the PSTN, are associated with nodes. Within
`a Digifonica supernode, the RBR server facilitates
`communication by responding to requests from the
`B2BUA server and providing routing messages back to
`
`-12-
`
`
`
`the B2BUA server.
`
`
`
`In response to a SIP INVITE message from an IP phone,
`the B2BUA server sends a USER_INVITE message to the
`RBR server, which then loads a calling profile using the
`“caller” parameter.
`
`The inviteClient() function is the entry point for the RBR
`software that receives this message. The inviteClient
`function receives five parameters in an
`XML_RPC_Message (Ex. 2014 at 42, “invite.php” line
`27):
` This function is called by the XML-RPC
`Server expecting type (integer
` * like 4 is THIRD_PARTY_INVITE)
`,username,callee,caller,callid (In that
` * order in the XML_RPC_Message)
`
` *
`
` A
`
` type value of 2 represents a “USER_INVITE” message
`(Ex. 2014 at 42, “invite.php” line 35):
`
`$type_arr[2] = 'USER_INVITE';
`
`Besides the type parameters, the USER_INVITE message
`contains four other parameters identified as “username”,
`“callee”, “caller” and “called” (Ex. 2014 at 42,
`“invite.php” lines 44-47):
`
`$username = $params->getParam(1)-
`>scalarval();
`$callee = $params->getParam(2)-
`>scalarval();
`$caller = $params->getParam(3)-
`>scalarval();
`$callid = $params->getParam(4)-
`>scalarval();
`
`The “caller” variable corresponds to the caller identifier
`and the “callee” parameter corresponds to the callee
`
`-13-
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`communication
`system, the process
`comprising:
`
`[1a] using a caller
`identifier associated
`with the caller to
`locate a caller dialing
`profile comprising a
`plurality of calling
`attributes associated
`with the caller;
`
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`identifier.
`
`The inviteClient() function first constructs a new
`call_routes() object (Ex. 2014 at 43, “invite.php” line 60):
`
`$call = new
`call_routes($caller,$caller_domain,$callee,$c
`allee_domain,$type,$forced_cid);
`
`The constructor for call_routes() is defined at lines 59-74
`of call_routes.class.php (Ex. 2014 at 19):
`
`/**
` * Constructor... the class must be called
`with the defined parameters. Callee domain is
`optional and the class will try to guess it.
` * Special is a flag (THIRD_PARTY_INVITE)
`when set, the caller is not set and
`concidered a incoming PSTN call.
` *
` * @param String $caller
` * @param String $domain
` * @param String $callee
` * @param String $callee_domain
` * @param String $special
` * @return call_routes
` */
`function
`call_routes($caller,$domain,$callee,$callee_d
`omain='',$special='') {
` $this->special_request = $special;
` $this-
`>call_ttl($caller,$domain,$callee,$callee_dom
`ain);
` $this->genereate_routes();
`}
`
`The call_routes() constructor calls the call_ttl() function
`(Ex. 2014 at 19, “call_routes.class.php” line 72):
`
`$this-
`>call_ttl($caller,$domain,$callee,$callee_dom
`ain);
`
`The call_ttl() constructor is defined at lines 131-153 of
`
`-14-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`call_ttl.class.php (Ex. 2014 at 27):
`
`/**
` * Class constructor must be initiated with
`at least caller, domain (callee_domain and
`special flag are optional.)<br>
` * Once it is initiated, it will
`automatically execute proper functions and do
`its due diligence, to create TTL.
` * $this->ttl is where you can get the Total
`time to live for this call. can be accessed
`byt extending classes and <br>
` * through the function get_ttl().
` *
` * @param string $caller
` * @param string $domain
` * @param string $callee
` * @param string $callee_domain
` * @param string $special
` * @return call_ttl
` */
`function
`call_ttl($caller,$domain,$callee,$callee_doma
`in='',$special='') {
` if(!$callee_domain){
` //try to guess
` if($temp_domain = $this-
`>guess_user_domain($callee)) $this-
`>callee_domain=$temp_domain;
` }
` $this-
`>set_caller_data($caller,$domain,$special);
`
` $this->set_callee($callee,$this-
`>callee_domain);
` $this->generate_ttl();
`}
`
`The call_ttl() function calls the set_caller_data() function
`(Ex. 2014 at 27, “call_ttl.class.php” line 149):
`
`$this-
`>set_caller_data($caller,$domain,$special);
`
`The set_caller_data() function is defined at lines 187-189
`of call_ttl.class.php and calls the set_caller() function (Ex.
`
`-15-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`2014 at 28, “call_ttl.class.php” line 188):
`
`$this->set_caller($caller,$domain);
`
`The set_caller() function is defined at lines 325-340 of
`call_e164.class.php (Ex. 2014 at 7):
`
`/**
` * Takes care of sequence of execution to
`create a caller profile
` *
` * @param String $caller
` * @param String $domain
` */
`public function set_caller($caller,$domain){
`
` $this->caller = $caller;
`
` if(! ($this->special_request ==
`'THIRD_PARTY_INVITE')){
` $this->caller_domain = $domain;
` $this->create_caller_profile();
` }
` $this->caller_is_set = true;
`}
`
`The set_caller() function calls the create_caller_profile()
`function (Ex. 2014 at 7, “call_e164.class.php” line 337):
`
`$this->create_caller_profile();
`
`The create_caller_profile() function is defined at lines
`342-391 of call_e164.class.php (Ex. 2014 at 7-8) (lines
`342-346 shown):
`
`/**
` * All aspects of the caller Flags and data
`needed to identify a caller is set here.
`including overlapping numbers.
` *
` */
`private function create_caller_profile(){
`
`The create_caller_profile() function queries an SQL
`
`-16-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1b] when at least one
`of said calling
`attributes and at least
`a portion of a callee
`identifier associated
`with the callee meet
`private network
`classification criteria,
`
`
`
`database to load a caller profile (Ex. 2014 at 7,
`“call_e164.class.php” line 348):
`
`$user_data = mysql_fetch_array($this-
`>sql_query("SELECT * FROM
`subscriber_dialing_profile WHERE
`username='$this->caller' and domain= '$this-
`>caller_domain'"));
`
`The data returned from the SQL query include the caller’s
`idd (international direct dial digits), ndd (national direct
`dial digits) and area code (Ex. 2014 at 7,
`“call_e164.class.php” lines 350-356):
`
`$this->caller_idd = $user_data['idd'];
`$this->caller_ndd = $user_data['ndd'];
`$this->caller_areacode =
`$user_data['area_code'];
`$this->caller_countrycode =
`$user_data['country_code'];
`$temp =
`explode(",",$user_data['local_length']);
`$this->caller_min_local_length = $temp[0];
`$this->caller_max_local_length = $temp[1];
`
`The RBR server matches attributes in the caller profile
`values against the callee identifier. The RBR server
`classifies the call as a public network call or a private
`network call.
`
`The call_ttl() constructor, after calling the
`set_caller_data() function calls the set_callee() function
`(Ex. 2014 at 27, “call_ttl.class.php” line 151):
`
`
`$this->set_callee($callee,$this-
`>callee_domain);
`
`The set_callee() function is defined at lines 393-418 of
`call_e164.class.php (Ex. 2014 at 8-9) (lines 393-399
`shown):
`
`/**
` * Takes care of the sequence and logic
`
`-17-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`needed to create a callee
` *
` * @param String $callee
` * @param String $callee_domain
` */
`public function
`set_callee($callee,$callee_domain=''){
`
`The set_callee() function calls the create_callee_profile()
`function (Ex. 2014 at 8, “call_e164.class.php” line 407):
`
`$this->create_callee_profile();
`
`The create_callee_profile() function is defined at lines
`450-539 of call_e164.class.php (Ex. 2014 at 9-11) (lines
`450-454 shown):
`
`/**
` * Creates a callee profile, all aspects of
`the callee is set here including the e164
`number is also set here. NOTE: the e164
`number can change when call forwarding
`occures.
` *
` */
`private function create_callee_profile(){
`
`The create_callee_profile() function matches values that
`were previously retrieved as part of the caller profile with
`the callee identifier. For example, a check is made to see
`if the callee identifier begins with the international dialing
`digits (idd) (Ex. 2014 at 9-10, “call_e164.class.php” lines
`467-476):
`
`case (isset($this->caller_idd) &&
`preg_match("/^".$this->caller_idd."/",$this-
`>callee)):
`$idd_length = strlen($this->caller_idd);
`$this->set_ml_id($idd_length);
`if($this->callee_data['ml_id']){ //callee was
`found and set
`$this->callee_type = 1;
`$this->check_callee_length($idd_length);
`$this->set_e164_formed_number(substr($this-
`
`-18-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`>callee,$idd_length));
`}else{
` throw new Exception(4);
`}
`
`Further, create_callee_profile() checks for matching
`national dialing digits (Ex. 2014 at 10,
`“call_e164.class.php” lines 479-494), checks for matching
`area codes (Ex. 2014 at 10, “call_e164.class.php” lines
`495-501), checks for a matching local number (Ex. 2014
`at 10-11, “call_e164.class.php” lines 506-513), and
`checks for a network number (Ex. 2014 at 11,
`“call_e164.class.php” lines 520-527).
`
`The create_callee_profile() function classifies the call by
`setting the callee_type variable to a value from 1 to 7. In
`the case of a private classification, the callee_type variable
`is set to one of the values 4 or 7 (Ex. 2014 at 11,
`“call_e164.class.php” lines 523 and 525 respectively):
`
`$this->callee_type = 4;
`$this->callee_type = 7;
`
`The set_callee() function calls the check_for_did()
`function. The check_for_did() function is defined at lines
`420-441 of call_e164.class.php (Ex. 2014 at 9):
`
`/**
` * Checks if the number being called is a
`mapped DID in our system, if it is we rout it
`internally
` *
` * @param String $user
` * @return Boolean or
`DidMap(DigifonicaNumber#Domain)
` */
`protected function check_for_did($user=''){
`
`$num = $user?$user:$this->callee;
`
`$did_check = @mysql_fetch_array($this-
`>sql_query("SELECT * FROM did_bank WHERE
`did='$num'"));
`
`if($did_check[0]){
`
`
`try{
`
`-19-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1c] producing a
`private network
`routing message for
`receipt by a call
`controller, said private
`network routing
`message identifying
`an address, on the
`private network,
`associated with the
`callee; and
`
`
`if($did_check['mapped_to'] and
`
`
`
`$did_check['domain']){
`
`
`
`
`return
`$did_check['mapped_to']."#".$did_check['domai
`n'];
`
`
`
`}else{
`
`
`
`
`throw new Exception(8);
`
`
`
`}
`
`
`}catch (Exception $e){
`
`
`
`$this-
`>e164_exception_handler($e->getMessage());
`
`
`}
`
`}
`
`return false;
`}
`
`The check_for_did() function queries an SQL database to
`determine if the reformatted callee number is contained in
`the “did_bank” table. This check determines if the callee
`is mapped to a Digifonica subscriber account. In the case
`that the check_for_did() function returns a value, the
`set_callee() function will make a call to itself at line 415
`of call_e164.class.php (Ex. 2014 at 8). This will cause a
`second call to the create_callee_profile() function, which
`will cause the callee_type to be changed to 4 or 7
`depending on whether the destination is associated with
`the same supernode or a different supernode as the caller.
`
`The RBR server produces a private network routing
`message in the case of a private network call
`classification. The routing message identifies an address
`associated with the destination Digifonica IP phone.
`
`The call_routes() constructor, after calling the call_ttl()
`function calls the genereate_routes() function (Ex. 2014 at
`19, “call_routes.class.php” line 73):
`
`$this->genereate_routes();
`
`The genereate_routes() function is defined at lines 91-148
`of call_routes.class.php (Ex. 2014 at 19-21) (lines 91-95
`shown):
`
`-20-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1d] when at least one
`of said calling
`attributes and at least
`a portion of said
`callee identifier meet
`a public network
`classification
`criterion,
`
`
`
`/**
` * Generates the routes and the SIP messages
`including VM data.
` *
` */
`protected function genereate_routes(){
`
`The genereate_routes() function tests the value of
`callee_type and in the case of 4 and 7 sets the routes[]
`array (Ex. 2014 at 20, “call_routes.class.php” line 146):
`
`/**
` * Generates the routes and the SIP messages
`including VM data.
` *
` */
`protected function genereate_routes(){
`
`The routes[] array is returned to the inviteClient() function
`and stored into a “$response” variable (Ex. 2014 at 43,
`“invite.php” line 62):
`
`$response = $call->get_routes();
`
`The inviteClient() function returns the $response variable
`to the B2BUA server over the XML_RPC connection (Ex.
`2014 at 43, “invite.php, line 70):
`
`return new XML_RPC_Response(new
`XML_RPC_Value($response, "string"));
`
`
`The RBR server matches attributes in the caller profile
`values against the callee identifier. The RBR server
`classifies the call as a public network call or a private
`network call.
`
`The call_ttl() constructor, after calling the
`set_caller_data() function calls the set_callee() function
`(Ex. 2014 at 27, “call_ttl.class.php” line 151):
`
`
`-21-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`$this->set_callee($callee,$this-
`>callee_domain);
`
`The set_callee() function is defined at lines 393-418 of
`call_e164.class.php (Ex. 2014 at 8-9) (lines 393-399
`shown):
`
`/**
` * Takes care of the sequence and logic
`needed to create a callee
` *
` * @param String $callee
` * @param String $callee_domain
` */
`public function
`set_callee($callee,$callee_domain=''){
`
`The set_callee() function calls the create_callee_profile()
`function (Ex. 2014 at 8, “call_e164.class.php” line 407):
`
`$this->create_callee_profile();
`
`The create_callee_profile() function is defined at lines
`450-539 of call_e164.class.php (Ex. 2014 at 9-11) (lines
`450-454 shown):
`
`/**
` * Creates a callee profile, all aspects of
`the callee is set here including the e164
`number is also set here. NOTE: the e164
`number can change when call forwarding
`occures.
` *
` */
`private function create_callee_profile(){
`
`The create_callee_profile() function matches values that
`were previously retrieved as part of the caller profile with
`the callee identifier. For example, a check is made to see
`if the callee identifier begins with the international dialing
`digits (idd) (Ex. 2014 at 9-10, “call_e164.class.php” lines
`467-476):
`
`
`-22-
`
`
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`case (isset($this->caller_idd) &&
`preg_match("/^".$this->caller_idd."/",$this-
`>callee)):
`$idd_length = strlen($this->caller_idd);
`$this->set_ml_id($idd_length);
`if($this->callee_data['ml_id']){ //call