BACKGROUNDToday's complex business environment frequently gives rise to conflicts of interest between divisions of an organization. For instance, conflicts of interest may arise when an auditing division of an organization interacts closely with a consulting division of the organization. In a second instance, conflicts of interest may arise when an investment advising division of an organization interacts closely with an investment management division of the organization. In a third instance, conflicts of interest may arise when a first attorney at a law firm previously represented a first client whose interests are opposed to the interests of a second client who is now being represented by a second attorney at the same law firm.
Ethical guidelines frequently recommend the use of “ethical walls” between divisions of an organization to prevent conflicts of interest that may arise when such divisions interact closely. When an ethical wall is used, people in such divisions of the organization are forbidden to communicate on matters that could lead to a conflict of interest. For instance, in the third instance given above, an ethical wall would prevent the first attorney from communicating with the second attorney about the first client and would prevent the second attorney from communicating with the first attorney about the second client.
SUMMARYIn general, this disclosure describes techniques of controlling communications occurring in a unified communications system. As described herein, a directory is established at a server system that hosts the unified communications system. The directory includes a plurality of hierarchically-organized categories. Each category specifies a set of users. One or more conferences may be associated with each of the categories. All communications occurring in the unified communications system occur within the context of one of the conferences. A user can only communicate within a conference if the conference is associated with a category that specifies a set of users that includes the user. By appropriately structuring the categories in the directory and by appropriately configuring the sets of users specified by the categories, the techniques of this disclosure may serve to prevent a user from using the unified communications system to communicate with certain other individuals. In this way, the techniques of this disclosure may enable an organization to enforce ethical walls or otherwise manage communications in a unified communications system across organizational boundaries.
Preventing individuals from using a unified communications system to communicate with certain other individuals may be useful in a variety of contexts. For example, a financial institution may have an investment division and a research division. The investment division may manage investments on behalf of the financial institution and the research division may provide investment research to customers of the financial institution. In this example, conflicts of interest would arise if people in the investment division could freely communicate with people in the research division. For instance, people in the investment division could persuade people in the research division to provide inaccurate research in order to enhance the financial institution's investments. In this example, the directory may include an “investments” category and a “research” category that are children of a “root” category. The “root” category may specify a set of users that includes all individuals in the financial institution. The “investments” category may specify a set of users that includes all individuals in the investment division and the “research” category may specify a set of users that includes all individuals in the research division. In this example, individuals in the investment division can only communicate in conferences associated with the “investments” category or the “root” category. Individuals in the “research” category can only communicate in conferences associated with the “research” category or the “root” category.
The techniques of this disclosure may be conceptualized in several ways. For instance, the techniques of this disclosure may be conceptualized as a method that comprises establishing, at a server system, a directory that includes a plurality of categories that are organized as a hierarchy. In this method each category specifies a set of users, wherein for each category in the plurality of categories other than a root category, the set of users specified by the category is a subset of the set of users specified by the category's parent category. The method also comprises associating a conference with a first category in the plurality of categories. Furthermore, the method comprises after associating the conference with the first category, determining, at the server system, whether a user is in the set of users specified by the first category. The method also comprises sending conference information to a client device used by the user only when it is determined that the user is in the set of users specified by the first category, the conference information enabling the client device to join the conference.
In another example, the techniques of this disclosure may be conceptualized as a device comprising a conference request module that receives from a server system a list of conferences that are associated with categories that specify sets of users that include a user of the device. The categories are hierarchically-arranged entries in a directory. Furthermore, each of the categories specifies a set of users. For each of the categories other than a root category, the set of users specified by the category is a subset of the set of users specified by the category's parent category. The device also comprises a join request module that sends to the server system a request to join a selected conference associated with a first one of the categories. In addition, the device comprises a conference module that enables the user of the device to communicate with other users in the selected conference when the server system determines that the first one of the categories specifies a set of users that includes the user of the device.
In another example, the techniques of this disclosure may be conceptualized as a computer-readable storage medium comprising instructions that, when executed, cause a computer system to receive a registration request from a first client device, the registration request specifying an identification credential of a first user. In addition, the instructions cause the computer system to determine whether the identification credential of the first user is valid. The instructions also cause the computer system to register the first user as a user of the first client device when it is determined that the identification credential of the first user is valid. Furthermore, the instructions cause the computer system to receive, after the first user is registered as the user of the first client device, a request from the first client device for a list of unified communications conferences that the first user is allowed to join. In addition, the instructions cause the computer system to identify, in response to receiving the request for the list of unified communications conferences that the first user is allowed to join, categories in a directory that have scope properties that specify sets of users that include the first user. The categories in the directory are organized as a hierarchy. For each category in the plurality of categories other than a root category, the set of users specified by the category is a subset of the set of users specified by the category's parent category. The instructions also cause the computer system to identify unified communications conferences that are included in the identified categories and that have user lists that include the first user. For each of the unified communications conferences, the user list of the unified communications conference is a subset of the set of users specified by the category that includes the unified communications conference. The instructions also cause the computer system to include the identified unified communications conference in a list of unified communications conferences that the first user is allowed to join when the first user is in the set of users specified by the first category. Further, the instructions cause the computer system to send to the first client device the list of the unified communications conferences that the first user is allowed to join. In addition, the instructions cause the computer system to receive, from the first client device, a request to join a selected unified communications conference in a first category in the plurality of categories. The instructions also cause the computer system to determine, in response to the request to join the selected unified communications conference, whether the first user is in the set of users specified by the first category and whether the first user is in the user list of the selected unified communications conference. In addition, the instructions cause the computer system to send conference information to the first client device when it is determined that the first user is in the set of users specified by the first category and that the first user is in the user list of the selected unified communications conference, the conference information enabling the first client device to join the selected unified communications conference, thereby enabling the first user to communicate in the selected unified communications conference. Further, the instructions cause the computer system to send to the first client device a list of users that are in the set of users specified by the first category, the list of users including a second user. In addition, the instructions cause the computer system to receive, from the first client device, a request to invite the second user to join the selected unified communications conference. The instructions also cause the computer system to identify a second client device as a client device used by the second user. Furthermore, the instructions cause the computer system to send to the second client device an invitation to join the selected unified communications conference. The instructions also cause the computer system to receive, from the second client device, an invitation response. In addition, the instructions cause the computer system to determine whether the invitation response indicates that the second user has accepted the invitation. The instructions also cause the computer system to send the conference information to the second client device, thereby enabling the second user to communicate in the selected unified communications conference.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
BRIEF DESCRIPTION OF THE DRAWINGSFIG. 1 is a block diagram illustrating an example communications system.
FIG. 2 illustrates a first example instance of a directory.
FIG. 3 illustrates a second example instance of a directory.
FIG. 4 is a block diagram illustrating details of an example client device and an example server system.
FIG. 4 is a flowchart illustrating an example operation of the client device.
FIG. 5 is a flowchart illustrating an example operation of the server device.
FIG. 7 is a block diagram illustrating an example implementation of a computing device.
DETAILED DESCRIPTIONFIG. 1 is a block diagram illustrating anexample communications system2. In the example ofFIG. 1,communication system2 includes aserver system4, anetwork6, and a plurality ofclient devices8A through8N (collectively, “client devices 8”). A plurality of users10A through10N (collectively, “users 10”) use respective ones of client devices8.
Server system4 may be a wide variety of different types of devices. For instance,server system4 may be a standalone server, a personal computer, a server blade, a mainframe computer, a supercomputer, or another type of computing device. In other instances,server system4 may include multiple computers that operate to provide the functionality ofserver system4. For instance,server system4 may include a set of computers operating as a cluster, a set of computers operating as a data center, or a set of computers operating in another type of configuration to provide the functionality ofserver system4.
Network6 may include one or more types of network. For instance,network6 may include a local area network, a wide area network (e.g., the Internet), a global area network, a metropolitan area network, a public switched telephone network, and/or another type of network.Network6 may include many network devices and many network links. The network devices innetwork6 may include bridges, hubs, switches, firewalls, routers, load balancers, and other types of network devices. The network links innetwork6 may include wired links (e.g., coaxial cable, fiber optic cable, 10BASE-T cable, 100BASE-TX cable, etc.) and may include wireless links (e.g., WiFi links, WiMax links, wireless broadband links, mobile telephone links, Bluetooth links, infrared links, etc.).
Client devices8 may be a wide variety of different types of devices. For example, one or more of client devices8 may be personal computers, mobile telephones, personal media players, smart phones, television set-top boxes, personal digital assistants, devices integrated into vehicles, mainframe computers, computer workstations, standalone servers, server blades, server farms, game platforms, or one or more other types of devices. In some implementations, client devices8 may include two or more separate devices that logically have the functionality of a client device.
Server system4 includes adirectory12.Directory12 includes a plurality of categories that are organized as a hierarchy. In one example implementation, each category indirectory12 may correspond to a subdivision of an organization, such as a business enterprise, a governmental organization, a non-profit organization, or another type of organization.Directory12 may be implemented in a variety of ways. For example,directory12 may be implemented as a Lightweight Directory Access Protocol (LDAP) directory. In this example, each category indirectory12 may be an entry in the LDAP directory.
One or more conferences may be associated with each category indirectory12. For example, a first conference may be associated with a category that corresponds to an “Accounting” subdivision of an organization and a second conference may be associated with a category that corresponds to a “Marketing” subdivision of the organization. In the example in whichdirectory12 is implemented as a LDAP directory, each conference may be an entry in the LDAP directory.
As used in this disclosure, a “conference” may be conceptualized as a virtual conference room in which individuals can meet to communicate with one another. Like in a real conference room, a variety of different types of communication may occur within a conference. In other words, users10 may be able to communicate with other ones of users10 in a conference using multiple media. For instance, just as individuals can speak to one another in a real conference room, individuals may be able to speak to one another in a conference. Furthermore, just as individuals can see one another in a real conference room, individuals may be able to see one another in a conference. Just as individuals could exchange written messages in a real conference room, individuals may be able to exchange written messages in a conference. Multiple individuals can communicate simultaneously in a conference. For example, five individuals can communicate with each other in a conference.
Each category indirectory12 specifies a set of users. For instance, each category indirectory12 may be associated with a scope property that specifies a set of users. The sets of users specified by the categories indirectory12 have the property that, for each category x except for a root category, the set of users specified by category x is a subset of the set of users specified by the parent category of category x. For example, the parent category of category x may specify a set of users that consists of users10A,10B, and10C. In this example, category x may validly specify a set of users that consists of users10A and10B because users10A and10B constitute a subset of the set of users specified by the parent category of category x. However, in this example, category x may not validly specify a set of users that consists of users10A and10D because users10A and10D do not constitute of a subset of the set of users specified by the parent category of category x.
The scope property of a category indirectory12 may specify a set of users in a variety of ways. For instance, the scope property of a category indirectory12 may specify all users of client devices that are in a particular domain. In another instance, the scope property of a category indirectory12 may specify a federated group that includes an arbitrary collection of users.
A user who manages a conference (i.e., the “manager” of the conference) may establish a user list for the conference. The user list for the conference can only include users who are in the set of users specified by the scope property of the category that contains the conference. However, the manager of the conference can limit the user list for the conference to a subset of the set of users specified by the scope property of the category that contains the conference. For example, the set of users specified by the scope property of the conference may be limited to user10A, user10B, and user10C. In this example, the manager of the conference can limit the user list for the conference to user10A and user10B.
When a user (e.g., user10A) wants to communicate with another user, user10A instructsclient device8A to send a request for a list of conferences toserver system4. In response to the request for the list of conferences,server system4 usesdirectory12 to identify categories that have scope properties that specify sets of users that include user10A. After identifying the categories that have scope properties that specify sets of users that include user10A,server system4 may identify conferences in the identified categories that have user lists that include user10A. After identifying the conferences,server system4 sends a list of the identified conferences toclient device8A.Client device8A then presents the list of the identified conferences.
User10A may then select one of the conferences from the list of the identified conferences. When user10A selects one of the conferences from the list of the identified conferences,client device8A sends to server system4 a request to join the selected conference. Upon receiving the request to join the selected conference,server system4 may verify that the scope property of the category that contains the selected conference specifies a set of users that includes user10A and that the user list of the selected conference includes user10A. Ifserver system4 successfully verifies that the scope property of the category that contains the selected conference specifies a set of users that includes user10A and that the user list of the selected conference includes user10A,server system4 sends conference information to the client device. The conference information enablesclient device8A to communicate in the selected conference. Ifserver system4 fails to successfully verify that the scope property of the selected conference specifies a set of users that includes user10A,server system4 rejects the request to join the selected conference and does not send the conference information toclient device8A.
Whenclient device8A receives the conference information fromserver system4,client device8A may launch a communications application that enables the user to participate in the selected conference. For instance,client device8A may launch a Microsoft Group Chat communications application, a Microsoft Office Communicator communications application, an instant messaging application, a video conferencing application, a voice telephony application, or another type of communications application. In this way, user10A effectively joins the selected conference.
User10A may invite other users to join a particular conference. To enable user10A to invite others to join the particular conference,client device8A may send to server system4 a request for a list of users who are allowed to participate in the particular conference. Upon receiving the request for the list of users who are allowed to participate in the particular conference,server system4 identifies users included in the set of users specified by the scope property of a category that contains the particular conference and that are included in the user list of the particular conference.Server system4 may then send the list of the identified users toclient device8A.
In addition to simply sending the names of the identified users,server system4 may send toclient device8A presence information regarding the identified users. The presence information regarding a user may indicate whether the user is available to participate in a conference. For example, the presence information regarding a user may indicate that the user is currently “available”, “busy”, “away”, “unavailable”, and so on.
Whenclient device8A receives the list of the identified users,client device8A may display the list of the identified users. User10A may then invite a user to join the particular conference by selecting a user from the list of the identified users. When user10A selects a user from the list of the identified users,client device8A may send a request toserver system4 to invite the selected user to join the particular conference.
It should be appreciated that, while the above description ofFIG. 1 referred to communications betweenserver system4 andclient device8A, this description may be applicable to any of client devices8 and users10.
FIG. 2 illustrates a first example instance ofdirectory12. As illustrated in the example ofFIG. 2, boxes with square corners represent categories and boxes with rounded corners represent conversations.
In the example ofFIG. 2,directory12 includes a “Root”category20. “Root”category20 is the root category ofdirectory12 because “Root”category20 has no parent category. In one example, the scope property of “Root”category20 may specify a set of users that includes all employees of a business. While not illustrated in the example ofFIG. 2, it should be appreciated that some example directories may have more than one root directory.
In the example ofFIG. 2,directory12 also includes a “Research”category22 and an “Investments”category24. “Research”category22 and “Investments”category24 are “descendant” categories of “Root”category20. Specifically, “Research”category22 and “Investments”category24 are “child” categories of “Root”category20 because there are no intervening categories between “Research”category22 and “Root”category20 and no intervening categories between “Investments”category24 and “Root”category20. In other words, “Root”category20 is an “ancestor” category of “Research”category22 and “Investments”category24. Specifically, “Root category”category20 is a “parent” category of “Research”category22 and “Investments”category24 because there are no intervening categories between “Research”category22 and “Root”category20 and no intervening categories between “Investments”category24 and “Root”category20.
In the example in which the scope property of “Root”category20 specifies a set of users that includes all employees of a business, the scope property of “Research”category22 may specify a set of users that includes ones of the employees of the business that are in a “Research” division of the business and the scope property of “Investments”category22 may specify a set of users that includes ones of the employees of the business that are in an “Investments” division of the business.
Furthermore, in the example ofFIG. 2,directory12 includes a “Real Estate Investments”category26. “Real Estate Investments”category26 is a child category of “Investments”category24. In the context of the previous example, the scope property of “Real Estate Investments”category26 may specify a set of users that includes ones of the employees of the business that are in the “Investments” division of the business that also work on real estate investments. Note that the scope property of “Real Estate Investments”category26 may not specify a set of users that includes users that are not included in the set of users specified by the scope property of “Research”division22. This is because the scope property of a child category specifies a subset of the set of users specified by the scope property of the child category's parent category.
In the example ofFIG. 2,directory12 includes a conference “A”28, a conference “B”30, a conference “C”32, a conference “D”34, and a conference “E”36. Conference “A”28 is a child of “Research”category22. Conference “B”30 is also a child of “Research”category22. Conference “C” is a child of “Real Estate Investments”category26. Conference “D” is a child of “Investments”category24. Conference “E” is a child of “Root”category20.
As discussed above,server system4 may usedirectory12 to identify conferences that a user is allowed to join. In the example ofFIG. 2, if the user is in the set of users specified by the scope property of “Real Estate Investments”category26,server system4 may identify conference “C”32, conference “D”34, and conference “E”36 as conferences that the user is allowed to join. If the user is in the set of users specified by the scope property of “Investments”category24, but not in the set of users specified by the scope property of “Real Estate Investments”category26,server system4 may identify conference “D”34 and conference “E”36 as conferences that the user is allowed to join. If the user is in the set of users specified by the scope property of “Research”category22,server system4 may identify conference “A”28, conference “B”30, and conference “E”36 as conferences that the user is allowed to join. If the user is in the set of users specified by the scope property of the “Root” category, but not in the sets of users specified by the scope property of “Research”category22 or the scope property of “Investments”category24,server system4 may identify conference “E”36 as the only conference that the user is allowed to join. It should be noted that the managers of conference “A”28, conference “B”30, conference “C”32, conference “D”34, and conference “E”36 may configure the user lists of these conferences to exclude the user
FIG. 3 illustrates a second example instance ofdirectory12. In the example ofFIG. 3,directory12 is structured to implement a shared hosting model for a plurality of organizations. In this shared hosting model a third-party service provider usesserver system4 to provide unified communications services for the plurality of organizations.
As illustrated in the example ofFIG. 3,directory12 includes a “Root”category40. “Root”category40 is the root category ofdirectory12 because “Root”category40 has no parent category. In the example ofFIG. 3, the scope property of “Root”category40 may specify a set of users that includes all employees of two separate businesses: “Grand Valley Dental Clinic” and “Contoso, Inc.”
These two businesses may have entered separate contracts with a third-party service provider that operatesserver system4. The contract between “Grand Valley Dental Clinic” and the service provider may obligate the service provider to provide unified communications services for “Grand Valley Dental Clinic” and the contract between “Contoso, Inc.” and the service provider may obligate the service provider to provide unified communications services for “Contoso, Inc.” In exchange, the contracts may obligate “Grand Valley Dental Clinic” and “Contoso, Inc.” to pay fees to the service provider. By entering these contracts with the service provider, “Grand Valley Dental Clinic” and “Contoso, Inc.” may be relieved of the burden of building and maintaining their own unified communications systems. Being relieved of the burden of building and maintaining their own unified communications system may be especially valuable to small businesses that do not possess technical expertise.
In order to effectively provide unified communications system services to multiple customers, the service provider may be able to structuredirectory12 to make it appear to each customer as if the service provider is only providing the unified communications system to them. In the example ofFIG. 3, the service provider may be able to structuredirectory12 to make it appear to “Grand Valley Dental Clinic” that the service provider is providing the unified communications system exclusively to “Grand Valley Dental Clinic.” At the same time, the service provider may be able to structuredirectory12 to make it appear to “Contoso, Inc.” that the service provider is providing the unified communications system exclusively to “Contoso, Inc.”
Accordingly, in the example ofFIG. 3, the service provider has created a “Grand Valley Dental Clinic”category42 and a “Contoso, Inc.”category44. In addition, the service provider may set the scope property of “Grand Valley Dental Clinic”category42 to specify a set of users that includes all employees of the “Grand Valley Dental Clinic” and none of the employees of “Contoso, Inc.” Similarly, the service provider may set the scope property of “Contoso, Inc.”category44 to specify a set of users that includes all employees of “Contoso, Inc.” and none of the employees of “Grand Valley Dental Clinic.” Furthermore, in the example ofFIG. 3, the service provider has configured “Grand Valley Dental Clinic”category42 to include a conference “A”48 and a conference “B”50. Because conference “A”48 and conference “B”50 are included in “Grand Valley Dental Clinic”category42, only users specified by the scope property of “Grand Valley Dental Clinic”category42 are allowed to communicate in conference “A”48 and conference “B”50 (i.e., the employees of “Grand Valley Dental Clinic”). In the example ofFIG. 3, the service provider has configured “Contoso, Inc.”category44 to include a conference “C”52. Because conference “C”52 is included in “Contoso, Inc.”category44, only users specified by the scope property of “Contoso, Inc.”category44 are allowed to communicate in conference “C”52 (i.e., the employees of “Contoso, Inc.”). In this way, the employees of “Contoso, Inc.” may be prevented from communicating with the employees of “Grand Valley Dental Clinic”.
FIG. 4 is a block diagram illustrating example details ofserver system4 andclient device8A. It should be appreciated that client devices8B-8N may include details similar to those ofclient device8A as illustrated in the example ofFIG. 4.
As illustrated in the example ofFIG. 4,client device8A includes aunified communications module60. In general terms,unified communications module60 enablesclient device8A to operate as a part ofunified communications system2. In the example ofFIG. 4,unified communications module60 is subdivided into several sub-modules. Specifically, in the example ofFIG. 4,unified communications module60 is subdivided into aregistration request module62, aconference request module64, ajoin request module66, aconference module68, auser list module70, and aninvitation response module72.
Furthermore, as illustrated in the example ofFIG. 4,server system4 includesdirectory12, aregistration response module74, aregistry76, aconference identification module78, a join response module80, auser identification module82, and aninvitation request module84.
Registration request module62 interacts withserver system4 to register user10A withserver system4. For example, when user10A begins interacting withclient device8A,registration request module62 may prompt user10A to enter one or more identification credentials that identify user10A. For instance,registration request module62 may prompt user10A to enter a username and password. In another instance,registration request module62 may prompt user10A to provide a biometric indicator, such as a fingerprint or a retinal scan. Afterregistration request module62 prompts user10A to enter the identification credentials,registration request module62 may receive the identification credentials from user10A or another source. Onceregistration request module62 has received the identification credentials,registration request module62 may generate a registration request that specifies the identification credentials.Registration request module62 may then send the registration request toserver system4 through a secure communications channel. For instance,registration request module62 may send the registration request toserver system4 using the Transport Layer Security (TLS) protocol, the Secure Sockets Layer (SSL) protocol, the IP-Sec protocol, a virtual private network protocol, or another type of secure communications protocol.
Whenserver system4 receives the registration request,registration response module74 inserver system4 may verify the identification credentials specified by the registration request. For instance, if the identification credentials include a username and a password,registration response module74 may determine whether the username is stored in a list of registered usernames and, if so, whether the password corresponds to the username. Ifregistration response module74 is unable to successfully verify the identification credentials specified by the registration request,registration response module74 may send toclient device8A a response indicating thatserver system4 was unable to successfully verify the identification credentials specified by the registration request.
Ifregistration response module74 successfully verifies the identification credentials specified by a registration request sent byclient device8A,registration response module74 may create an entry inregistry76 that maps user10A toclient device8A. Furthermore, ifregistration response module74 successfully verifies the identification credentials specified by the registration request,registration response module74 may generate a globally unique identifier (“GUID”).Registration response module74 may then send the GUID toregistration request module62 inclient device8A. Subsequently,client device8A may use the GUID in communications withserver system4, thereby alertingserver system4 that the communications are associated with user10A. In this way,registration request module62 registers atserver system4 that user10A is the user ofclient device8A.
After user10A is registered atserver system4 as the user ofclient device8A,conference request module64 inclient device8A sends a request for a list of conferences toserver system4. In some implementations,conference request module64 may be configured to automatically send the request for the list of conferences toserver system4. In other implementations,conference request module64 may be configured to send the request for the list of conferences toserver system4 in response to input from user10A.
Whenserver system4 receives the request for the list of conferences,conference identification module78 inserver system4 usesdirectory12 to identify conferences that user10A is allowed to join. For example,conference identification module78 may identify categories indirectory12 that have scope properties that specify sets of users that include user10A. In this example,conference identification module78 may then identify conferences in the identified categories that have user lists that include user10A. Applying this example to the example directory illustrated inFIG. 2,conference identification module78 may, for instance, identify “Real Estate Investments”category26, “Investments”category24, and “Root”category20 as categories that have scope properties that specify sets of users that include user10A. In this example, if conference “C”32 and conference “E”36 have user lists that include user10A and if conference “D”34 has a user list that does not include user10A,conference identification module78 may then identify conference “C”32 and conference “E”36, but not conference “D”34. Note that in this example,conference identification module78 identifies “Investments”category24 and “Root”category20 because the set of users specified by the scope property of “Real Estate Investments”category26 is a subset of the set of users specified by the scope property of “Investments”category24, which is a subset of the users specified by the scope property of “Root”category20. In a second example, conferences may not be associated is user lists. In this second example,conference identification module78 may identify conferences that user10A is allowed to join by identifying categories that have scope properties that specify sets of users that include user10A. In this second example,conference identification module78 may then identify all conferences in the identified categories.
Afterconference identification module78 identifies the conferences that user10A is allowed to join,conference identification module78 sends toclient device8A a list of the conferences that user10A is allowed to join. Whenclient device8A receives the list of the conferences that user10A is allowed to join,conference request module64 may, in some implementations, present the list of the conferences that user10A is allowed to join to user10A. For example,conference request module64 may present a graphical user interface that displays the list of the conferences that user10A is allowed to join. In a second example,conference request module64 may use voice synthesis to vocalize names of each of the conferences that user10A is allowed to join. This second example may be useful whenclient device8A is a telephone.
Afterconference request module64 receives the list of conferences that user10A is allowed to join, joinrequest module66 may send to server system4 a request to join a conference. In a first set of example configurations, joinrequest module66 may send the request to join a conference when user10A selects the conference from the list of the conferences that user10A is allowed to join. In a second set of example configurations, joinrequest module66 may automatically send the request to join a conference in the list of the conferences that user10A is allowed to join. In a third set of example configurations, joinrequest module66 may send the request to join a conference in response to input from user10A. In this third set of example configurations, the conference may or may not be included in the list of conferences that user10A is allowed to join. For instance, user10A could explicitly name a conference that user10A wishes to join.
Whenserver system4 receives a request to join a conference, join response module80 inserver system4 determines whether user10A is allowed to join the conference. In some example configurations, join response module80 may checkdirectory12 to determine whether the set of users specified by the scope property of a category that contains the conference includes user10A and may checkdirectory12 to determine whether a user list of the conference includes user10A. If join response module80 determines that user10A is not allowed to join the conference, join response module80 may reject the request to join the conference. If join response module80 determines that user10 is allowed to join the conference, join response module80 may send toclient device8A conference information that enablesclient device8A to join the conference. For instance, join response module80 may send toclient device8A an encryption key that enablesclient device8A to decrypt communications occurring in the conference. Determining whether user10A is allowed to join the conference whenserver system4 receives the request to join the conference may prevent user10A from joining a conference that user10A is not allowed to join by explicitly naming the conference.
Ifclient device8A receives the conference information that enablesclient device8A to join the conference,conference module68 inclient device8A enables user10A to communicate with other users in the conference.Conference module68 may enable user10A to communicate with other users in the conference in a variety of ways. For instance,conference module68 may present a variety of different types of user interfaces for different modes of communication occurring in the conference. For example,conference module68 may present a chat room interface if chat communication is occurring in the conference. In another example,conference module68 may present a video screen interface if video conferencing communication is occurring in the conference. Furthermore, the types of user interfaces presented may depend on what type ofdevice client device8A is. For instance, ifclient device8A is a telephone,client device8A may only present an audio interface even when video conferencing communication is occurring in the conference. In some instances,conference module68 may enable user10A to communicate simultaneously with the other users in the selected conference using multiple media, e.g., video conferencing and instant messaging.
Afterconference module68 uses the information to join the conference, user10A may begin using communicating in the conference. For example, if audio communication is occurring in the conference,conference module68 may receive audio input from user10A speaking into a microphone and may forward this audio input to directly or indirectly to other uses participating in the conference. Furthermore, in this example,conference module68 may receive audio signals from other users participating in the conference and may output these audio signals on a speaker.
Furthermore, if user10A is allowed to join the conference,user identification module82 may usedirectory12 to identify users who are allowed to join the conference. For example, if user10A is allowed to join conference “D”34 in the example directory illustrated inFIG. 2,user identification module82 may identify other users who are in the user list of conference “D”34. Afteruser identification module82 identifies the users who are allowed to join the conference,user identification module82 may send a list of the identified users toclient device8A.User identification module82 may also send presence information regarding each of the identified users toclient device8A. As discussed above, the presence information regarding a user indicates an availability state of the user.
Whenclient device8A receives the list of the identified users,user list module70 may present the list of the identified users. Subsequently,user list module70 may receive user selection input from user10A. The user selection input may indicate that user10A wishes to invite one of the identified users to join the conference. Whenuser list module70 receives the user selection input,user list module70 sends a request toserver system4 to invite the user indicated by the user selection input to join the conference.
Upon receiving a request to invite a user to join a conference,invitation request module84 inserver system4 may useregistry76 to identify which one of client devices8 is currently being used by the invited user.Invitation request module84 may then send an invitation to join the conference to the invited user's client device. For instance, if user10A is the invited user,invitation request module84 may identifyclient device8A as the one of client device8 that is currently being used by user10A and may send an invitation toclient device8A.
Whenclient device8A receives an invitation to join a conference,invitation response module72 inclient device8A may notify user10A of the invitation.Client device8A may notify user10A of the invitation in a variety of ways depending on the capabilities of the device used by the user and the types of communication occurring in the conference. For instance, ifclient device8A is a voice-only telephone and voice communication is occurring in the conference,invitation response module72 may causeclient device8A to audibly output a ring tone and/or vibrate. In another instance, ifclient device8A is a personal computer and video conferencing is occurring in the conference,invitation response module72 may display on a monitor ofclient device8A a message describing the invitation to join the conference.
User10A may accept or decline an invitation to join a conference. If user10A accepts the invitation to join the conference,invitation response module72 may send to server system4 a message that indicates that user10A accepted the invitation to join the conference. In response,invitation request module84 sends toclient device8A information that enablesclient device8A to join the conference. Whendevice8A receives that information that enablesclient device8A to join the conference,conference module68 may use the information to join the conference. Afterconference module68 uses the information to join the conference, user10A may begin communicating in the conference.
If user10A declines the invitation to join the conference,invitation response module72 may send to server system4 a message that indicates that user10A has declined the invitation to join the conference. Whenserver4 receives the message that indicates that user10A has declined the invitation to join the conference,invitation request module84 does not send toclient device8A information that enablesclient device8A to join the conference.
FIG. 5 is a flowchart illustrating an example operation ofclient device8A. It should be understood that one or more of client devices8B through8N may also perform the example operation illustrated inFIG. 5.
The example operation ofFIG. 5 begins whenregistration request module62 sends a registration request to server system4 (90). As discussed above, the registration request may specify identification credentials that identify user10A as the user ofclient device8A. Subsequently,registration request module62 receives a registration response from server system4 (92).Registration request module62 may then determine whether the registration response indicates thatserver system4 successfully validated the identification credentials specified by the registration request (94). Ifregistration request module62 determines that the registration response indicates thatserver system4 did not successfully validate the identification credentials specified by the registration request (“NO” of94),registration request module62 may request new identification credentials from user10A (96).Registration request module62 may then loop back and send a registration request that specifies the new identification credentials (90).
On the other hand, ifregistration request module62 determines that the registration response indicates thatserver system4 successfully validated the identification credentials specified by the registration request (“YES” of94),conference request module64 sends to server system4 a request for a list of conferences (98). In response to the request for the list of conferences,conference request module64 may receive a list of conferences that user10A is allowed to join (100). As discussed above, user10A may, for example, be allowed to join a conference when the category that includes the conference has a scope property that specifies a set of users that includes user10A and the conference has a user list that includes user10A. Afterconference request module64 receives the list of conferences that user10A is allowed to join,conference request module64 may present the list of conferences that user10A is allowed to join (102).
Afterconference request module64 presents the list of conferences, joinrequest module66 may receive conference selection input from user10A (104). The conference selection input may indicate that user10A wishes to join one of the conferences presented in the list of conferences that user10A is allowed to join. In response to receiving the conference selection input, joinrequest module66 may send to server system4 a request to join the conference indicated by the conference selection input (106).
Subsequently, joinrequest module66 may receive from server system4 a response to the request to join the conference (108). Joinrequest module66 may then determine whether the response to the request to join the conference indicates that user10A is allowed to join the conference (110). If the response to the request to join the conference indicates that user10A is not allowed to join the conference (“NO” of110), joinrequest module66 may notify user10A that user10A is not allowed to join the conference (112).
On the other hand, if the response to the request to join the conference indicates that user10A is allowed to join the conference (“YES” of110),conference module68 may present a user interface (114). As discussed above, the user interface may be appropriate for the type or types of communications occurring in the conference. Afterconference module68 presents the user interface, user10A may begin communicating with other users participating in the conference (116).
Furthermore,conference module68 may receive from server system4 a list of users who are allowed to participate in the conference (118). For example, the list of users may include users that are in the set of users specified by the user list of the conference. For example,conference module68 may receive from server system4 a list that indicates that “Greg P”, “Sam Q”, and “Nina H” are allowed to participate in the conference. After receiving the list of users who are allowed to participate in the conference,conference module68 may present the list of users who are allowed to participate in the conference (120).
Subsequently,conference module68 may receive from user10A user selection input that indicates one or more of the users from the list of users who are allowed to participate in the conference (122). In response to receiving the user selection input,conference module68 may send to server system4 a request to invite the users indicated by the user selection input to join the conference (124).
FIG. 6 is a flowchart illustrating an example operation ofserver system4. Although the operation illustrated inFIG. 6 is explained with reference toserver system4 receiving information fromclient device8A and sending information toclient device8A, it should be appreciated thatserver system4 may receive information from or send information to any of client devices8.
As illustrated in the example ofFIG. 6,registration response module74 may receive a registration request fromclient device8A (140). Whenregistration response module74 receives the registration request,registration response module74 may determine whether identification credentials specified by the registration request are valid (142). For instance,registration response module74 may determine whether a username specified in the registration request corresponds to a password specified in the registration request. Ifregistration response module74 determines that the identification credentials specified by the registration request are not valid (“NO” of142),registration response module74 may reject the registration request and send a registration response that indicates thatserver system4 did not successfully validate the identification credentials specified by the registration request (144).
Ifregistration response module74 determines that the user identification credentials specified by the registration request are valid (“YES” of142),registration response module74 may updateregistry76 to register the user specified by the registration request (i.e., user10A) as the user ofclient device8A (146). Next,registration response module74 may send a registration response toclient device8A that indicates thatserver system4 successfully validated the identification credentials specified by the registration request (148). Ifregistration response module74 determines that the user identification credential specified by the registration request are valid, the registration response may, in some example implementations, include a GUID thatclient device8A may use to identify further communications fromclient device8A toserver system4.
Subsequently,conference identification module78 inserver system4 may receive a request for a list of conferences fromclient device8A (150). In response to the request for the list of conferences,conference identification module78 may usedirectory12 to identify categories that have scope properties that specify sets of users that include user10A (152).Conference identification module78 may then usedirectory12 to identify conferences in the identified categories that have user lists that include user10A (154). In this way,conference identification module78 identifies conferences that user10A is allowed to join. After identifying the conferences that user10A is allowed to join,conference identification module78 may send toclient device8A a list of the conferences that user10A is allowed to join (156).
Afterconference identification module78 sends toclient device8A the list of the conferences that user10A is allowed to join, join response module80 may receive fromclient device8A a request to join a conference (158). Upon receiving the request to join the conference, join response module80 may usedirectory12 to determine whether user10A (i.e., the user ofclient device8A) is allowed to join the conference (160). If user10A is not allowed to join the conference (“NO” of160), join response module80 may send toclient device8A a message that indicates that user10A is not allowed to join the conference (162).
On the other hand, if user10A is allowed to join the conference (“YES” of160), join response module80 may send conference information toclient device8A (164). The conference information enablesclient device8A to join the conference.
In addition,user identification module82 may usedirectory12 to identify other users that are allowed to join the conference (166). After identifying the other users that are allowed to join the conference,user identification module82 may send toclient device8A a list of the identified users who are allowed to join the conference (168).
Subsequently,invitation request module84 may receive fromclient device8A a request to invite a user (170). In response to the request to invite the user,invitation request module84 may useregistry76 to identify the client device associated with the invited user (172). Next,invitation request module84 may send an invitation to the client device associated with the invited user (174).
Invitation request module84 may then receive an invitation response from the client device associated with the invited user (176). Upon receiving the invitation response,invitation request module84 determines whether the invitation response indicates that the invited user accepted the invitation to join the conference (178). Ifinvitation request module84 determines that the invitation response indicates that the user accepted the invitation to join the conference (“YES” of178),invitation request module84 sends to the client device associated with the invited user conference information that enables the client device associated with the invited user to join the conference (180). Ifinvitation request module84 determines that the invitation response indicates that the user did not accept the invitation to join the conference (“NO” of178),invitation request module84 does not send conference information that enables the client device associated with the invited user to join the conference (182).
FIG. 7 illustrates anexample computing device200 that may embodyserver system4 and/or client devices8. As illustrated in the example ofFIG. 7,computing device200 includes at least oneprocessing unit202 and asystem memory204. Depending on the exact configuration and type of computing device,system memory204 may be volatile (such as RAM), non-volatile (such as ROM, flash memory, etc.) or some combination of the two.System memory204 typically includes anoperating system205 and one ormore program modules206 working withinoperating system205. This disclosure has described several features ofclient device8A andserver system4 as “modules.” It should be appreciated that the functionality of such “modules” may be implemented through an interaction between hardware and software. For instance, the functionality of modules may occur when processingunit202 executes instructions in one ofprogram modules206. Alternatively, the functionality of such “modules” may be implemented as hardware.
Computing device200 may have additional features or functionality. For example,computing device200 may also include additional data storage devices (removable and/or non-removable) such as, for example, magnetic disks, optical disks, or tape. Such additional storage is illustrated in the example ofFIG. 7 byremovable storage209 andnon-removable storage210. Computer-readable storage media may include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data.
System memory204,removable storage209 andnon-removable storage210 are all examples of computer-readable storage media. Example types of computer-readable storage media include, but are not limited to: Random Access Memory (RAM), Read-Only Memory (ROM), Electrically-Erasable Programmable Read-Only Memory (EEPROM), flash memory, or other memory technology, CD-ROM, digital versatile discs (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other types of media which can be used to store the desired information and which can be accessed by computingdevice200. Any such computer-readable storage media may be part ofcomputing device200.Computing device200 may also have one ormore input devices212 such as keyboards, mice, pens, voice input devices, touch input devices, and other types of input devices.Computing device200 may also include one ormore output devices214 including monitors, displays, speakers, printers, and other types of output devices.
Computing device200 also contains one or more communication interfaces216 that allowcomputing device200 to communicate with other computing devices. For instance, one or more of communication interfaces216 may enablecomputing device200 to communicate with other computing devices vianetwork6.
It is to be understood that the implementations described herein may be implemented by hardware, software, firmware, middleware, microcode, or any combination thereof. When the systems and/or methods are implemented in software, firmware, middleware or microcode, program code or code segments, they may be stored in a computer-readable storage medium, such as a storage component. A code segment may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a class, or any combination of instructions, data structures, or program statements A code segment may be coupled to another code segment or a hardware circuit by passing and/or receiving information, data, arguments, parameters, or memory contents. Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted using any suitable means including memory sharing, message passing, token passing, network transmission, etc.
For a software implementation, the techniques described herein may be implemented with modules (e.g., procedures, functions, and so on) that perform the functions described herein. The software codes and instructions may be stored in computer-readable storage media and executed by processors. The memory unit may be implemented within the processor or external to the processor, in which case it can be communicatively coupled to the processor via various means as is known in the art.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.