# Creating conferences

This topic presents:

- Creating a conference

- Adding members to a conference

## Creating a conference

After opening a conference resource and reviewing the resource capabilities, you can create a new conference. The following table lists the functions to use when creating a new conference:

To... | Description
--- | ---
Create a new conference, call cnfCreateConference with cnfresourcehd and the appropriate parameters. | Returns a conference identifier (confid) to use when accessing the conference object. To guarantee that you are able to add a certain number of members to the conference, or if you know in advance how many members will participate in this conference, you can allocate a certain number of members when calling cnfCreateConference. You can also open a conference and allocate no members. You may be able to add members on the fly if the conference resource has room. When calling cnfCreateConference you can use fewer capabilities than the resource supports, enabling you to add more members to the conference. For more information, refer to the section on Optimizing performance.
Verify changes at the resource level after creating the conference, call cnfGetResourceInfo. | Returns a CNF_RESOURCE_INFO structure containing information such as the capabilities of the resource, the maximum number of members the resource can accept, and the number of members available for a new conference. Note: After calling cnfCreateConference, the number of conferences increases and the number of available members decreases.
Redefine the number of members allocated to a conference, call cnfResizeConference with appropriate parameters. | Enables you to increase or decrease the number of members allocated to the conference.
Retrieve a list of conferences, call cnfGetConferenceList with appropriate parameters. | Returns the confidlist. By performing a loop using the returned confidlist, you can get information about each conference and retrieve the user value. For example: for (confindex = 0; confindex < numconfid; confindex++) { error = cnfGetConferenceInfo(cnfresourcehd, confidlist[confindex], &conferenceinfo, sizeof(CNF_CONFERENCE_INFO)); . . . }

## Adding members to a conference

To add members to a conference, follow these steps:

Step | Action | Function
1 | Add the member to the conference. | cnfJoinConference with appropriate parameters. If the call succeeds, the member identifier (memberid) is returned and can be used by the application for any function call requiring a memberid.
2 | Retrieve the member's information. | cnfGetMemberInfo using a valid memberid. Returns a CNF_MEMBER_INFO structure containing switching related information such as the input MVIP-95 local stream (even value) and the timeslot number for the member. To get the output MVIP-95 local stream, increment the input local stream by one.
3 | On AG and CG boards, establish a connection between the member's telephone line and the conference bridge. | swiMakeConnection For more information, see Establishing the connection.
4 | Set up one or more member attributes and activate the member in the conference. | cnfSetMemberAttribute or cnfSetMemberAttributeList For example, the talker attribute is set to 0 by default. To enable the new member to speak and be heard: error = cnfSetMemberAttribute(cnfresourcehd, memberid, MEMBER_ATTR_TALKER_ENABLE, 1); For more information, see Setting member attributes.

### Establishing the connection

After you add a member to a conference, call swiMakeConnection to set up the connection between the member's telephone line and the conference bridge. When the connection is established, streams are reserved for NaturalConference. Use showcx95 to determine the number of timeslots available for conferencing.

To enable a NaturalConference stream, the following statement must be added to the board keyword file:

ConferencingStream.Enable = YES

For more information about the board keyword file, refer to Modifying the board keyword file.

The following table lists the number of reserved timeslots by board type. Not all timeslots are used. The timeslot range does not have to be consecutive.

Board type | Number of reserved timeslots
--- | ---
AG Series | 256
CG Series | 128 (Default value. This can be changed.)

To change the default number of timeslots allocated to a logical conferencing stream (usually 256), add the following statement to the board keyword file:

ConferencingStream.SlotCount = xxx

The following example code connects a member to the trunk interfaces (MVIP-95 local streams 0 and 1):

error = cnfGetMemberInfo(cnfresourcehd, memberid, &memberinfo,
sizeof(CNF_MEMBER_INFO));
/* Allocate SWI_TERMINUS input structure using memberinfo.stream and memberinfo.timeslot. */
SWI_TERMINUS input = { MVIP95_LOCAL_BUS, memberinfo.stream,
memberinfo.timeslot };
/* Allocate SWI_TERMINUS output structure for the trunk interface
(stream 1) */
SWI_TERMINUS output = { MVIP95_LOCAL_BUS, 1, trunk.timeslot };
/* Full duplex connection */
error = swiMakeConnection(swihd, &input, &output, 1);
input.stream += 1;
output.stream -= 1;
error = swiMakeConnection(swihd, &output, &input, 1);

Refer to the Dialogic® NaturalAccess™ Switching Interface API Developer's Manual for more information about switching.

#### Using the Point-to-Point Switching service

To use the Point-to-Point Switching (PPX) service to establish the connection between the trunk streams and the member's conference seat, update ppx.cfg with local streams 32 and 33 or local streams 64 and 65. For example:

Inputs
LOCAL:0..14(2):0..23 # Trunk (0..29 for E1)
LOCAL:16..18(2):0..127 # DSP
LOCAL:32:0..256 # Conferencing stream
End Inputs
Outputs
LOCAL:1..15(2):0..23 # Trunk (0..29 for E1)
LOCAL:17..19(2):0..127 # DSP
LOCAL:33:0..256 # Conferencing stream
End Outputs

The following table shows the NaturalConference logical stream assignments by board type:

Board type | NaturalConference logical stream
--- | ---
AG Series | 32 and 33
CG Series | 68 and 69

Refer to the Dialogic® NaturalAccess™ Point-to-Point Switching API Developer's Manual for more information.